2016-12-14 6 views
0

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

Когда я пытаюсь добраться до URL-адреса «BoB/Login/ChangeSection» (BoB - это имя проекта, Login - контроллер, ChangeSection - действие), он отправляется на «BoB/Policy/Login». Это означает, что регистрация области внутри области политики захватывает запрос и помещает префикс политики спереди, когда этого не должно быть.

Вот мой проект RouteConfig

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "BoBHome", action = "Index", id = UrlParameter.Optional }, 
      namespaces: new string[] { "BoB.Controllers" } 
      ); 

и здесь регистрация Площадь

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      name: "BoBPolicy_default", 
      url: "Policy/{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
      namespaces: new string[] { "BoB.Areas.BoBPolicy.Controllers" } 
     ); 
    } 

Я был под впечатлением пространств имен будет держать это произошло, но это явно не так. Любая помощь приветствуется.

Некоторая дополнительная информация:

Это происходит из другого проекта, который не MVC так Переадресовывание выглядит следующим образом:

Response.Redirect("/BoB/BoBLogin/ChangeSection?controller=PolicyOverview"); 

ответ

1

Я думаю, что ваш вопрос похож на non area route issue, что требует использования параметра области для предотвращения префикса URL-адреса области, вставленного при использовании маршрута по умолчанию:

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    // set area parameter with area name 
    context.MapRoute(
     name: "BoBPolicy_default", 
     url: "Policy/{controller}/{action}/{id}", 
     // add area parameter here 
     defaults: new { area = "Policy", controller = "Home", action = "Index", id = UrlParameter.Optional }, 
     namespaces: new string[] { "BoB.Areas.BoBPolicy.Controllers" } 
    ); 
} 

NB: Поскольку регистрация маршрута области всегда размещалась поверх def aute route (читайте this answer по причинам, лежащим в его основе), возможно, что маршрутизатор неправильно выбрал запрос маршрута по умолчанию в маршрут маршрута, если ограничения (маршруты) маршрута не указаны.

Похожие:

MVC5 Routing Go to specific Areas view when root url of site is entered

Смежные вопросы