2015-09-21 5 views
1

У меня есть два маршрута в файлах routeConfig, как показано ниже.Пути MVC со статическим префиксом

  1. маршрута с администратора префикса, который обрабатывает запрос для администратора части
  2. по умолчанию маршрут без префикса, для которого я добавил datatoken к карте маршрутов кандидата Площадь
routes.MapRoute(
        name: "admin", 
        url: "Admin/{controller}/{action}/{id}", 
        defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }, 
        namespaces: new[] { "abc.namespace1" } 
       ); 

       routes.MapRoute(
        name: "default", 
        url: "{controller}/{action}/{id}", 
        defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }, 
        namespaces: new[] { "abc.namespace2" } 
       ).DataTokens.Add("area", "Candidate"); 

Но проблема в том, когда я печатаю URL-адрес локальный/MyApp/Администратор/Главная/Индекс он ударяет контроллер в abc.namespace1 (который, как ожидается) и LocalHost/MyApp/Главная/Index также ударяя контроллер Home внутри abc.namespace1 вместо HomeController внутри abc.namespace2 in кандидат.

Что я хочу сделать здесь обрабатывать все маршруты с префиксом администратора с контроллерами внутри abc.namespace1 и всех маршрутов без префикса с контроллерами внутри abc.namespace2, который мой candiate Площадь.

С уважением

ответ

0

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

Узор обычно <namespace of area>.<area name>.<controller namespace>

Например, в проекте площади под названием «Admin», пространство имен должны быть:

"MvcMusicStore.Areas.Admin.Controllers" 

В моем опыте, соглашение о том, как области установлены довольно строгие. Вы не должны настраивать маршрут в AreaRegistration, а не в корне вашего проекта, чтобы заставить его работать.

public class CandidateAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get 
     { 
      return "Candidate"; 
     } 
    } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Candidate_default", 
      "{controller}/{action}/{id}", 
      new { controller = "Account", action = "Login", id = UrlParameter.Optional }, 
      new string[] { "<project name>.Areas.Candidate.Controllers" } 
     ); 
    } 
} 

Районы основаны на конвенциях. Если вы отклоняетесь слишком далеко от ожидаемых конвенций, они просто не функционируют.

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

  • Нет связанных вопросов^_^