Если я установлю маршрут по умолчанию и маршрутизацию атрибутов для одного и того же контроллера в mvc5, то обычная маршрутизация не работает

#c# #asp.net #routes #asp.net-mvc-5

Вопрос:

Контроллер

     [HttpGet]
[Route("find-a-doctor")]
public ActionResult FindADoctor()
{
    ViewData["sList"] = specialities ;
    return View();
}
 

Маршрут.Конфигурация

 public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapMvcAttributeRoutes();
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}",
        defaults: new { controller = "UserPanelFinADoctor", action = "FindADoctor" },
         namespaces: new string[] { "xyz.Controllers" }
    );
}
 

Это результат, когда я отлаживаю код. Там написано «Ресурс не может быть найден».

Ответ №1:

Я снова подумал об этом и нашел это в документах microsot.

Действия либо маршрутизируются условно, либо маршрутизируются по атрибутам. Размещение маршрута на контроллере или действие делает его маршрутизируемым атрибутом. Действия, определяющие маршруты атрибутов, не могут быть достигнуты с помощью обычных маршрутов, и наоборот. Любой атрибут маршрута на контроллере перенаправляет все действия в атрибуте контроллера.

Так и в вашем примере .Поскольку вы зарегистрировали маршрут для своего действия в разделе маршрутизация на основе атрибутов. Маршрутизация по соглашению не будет работать. Следует использовать любой из них, а не оба.

Ссылка на статью — https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-5.0#mixed-routing-attribute-routing-vs-conventional-routing