2015-10-09 10 views
0

У меня есть требование, в котором я должен карту по следующей ссылкеДобавление маршрутизации в MVC 5

/amer/us/en/ = Home controller 
/amer/us/en/login/index = Home controller 
/amer/us/en/confirmation = Confirmation controller 

наряду с обычным действием по умолчанию.

Например, если пользователь переходит на

http:\\test.com --> http://test/home/index 
http:\\test.com/amer/us/en/login/index --> http://test/home/index 
http:\\test.com/amer/us/en/ --> http://test/home/index 

Я искал в маршрутизации атрибутов и поэтому я добавил следующий код в HomeController

[RoutePrefix("amer/us/en/")] 
    [Route("{action=index}")] 
    public class HomeController : Controller 
    { 

    } 

, и я получаю эту ошибку The route prefix 'amer/us/en/' on the controller named 'Home' cannot begin or end with a forward slash, а также по умолчанию маршрутизация сейчас не работает, поэтому http://test.com ничего не загружает. Ниже приведен мой класс RouteConfig по умолчанию.

public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapMvcAttributeRoutes(); 

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
     } 

Очень новый для MVC. Может кто-нибудь сказать мне, что я делаю неправильно здесь.

ответ

1

Маршрутизация в MVC работает либо путем определения ваших маршрутов в классе RouteConfig, либо путем маршрутизации атрибутов (или вы можете использовать области). Маршрутизация с помощью RouteConfig работает с порядком, с которым вы определяете маршруты. Когда наступит запрос, MVC попробует ваши маршруты сверху вниз и выполнит первый, который может соответствовать запрошенному URL-адресу. Таким образом, необходимость маршрутизации в вашем примере, может быть достигнуто за счет:

routes.MapRoute(
      name: "RootLogin", 
      url: "amer/us/en/login/index/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

routes.MapRoute(
      name: "DefaultAmer", 
      url: "amer/us/en/{controller}/{action}{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

это будет отображать имя пользователя в качестве специального маршрута и все остальные /amer/us/en/ маршруты пойдут на все, что controller приходит после того, как и все, что action от него. Последний маршрут, если запрос не начинается с /amer/us/en, будет выполнять поведение по умолчанию.

Похоже, однако, вы хотите определить /amer/us/en/ как область, поэтому вы можете также взглянуть на нее.

+0

Отлично работает .. Спасибо. – user1221989

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