Как скрыть имя контроллера в URL? - PullRequest
1 голос
/ 19 декабря 2008

Как скрыть имя контроллера в URL?

Я использую ASP.NET MVC.

Исходный URL: http://www.sample.com/Users.mvc/UserDetail/9615

«Пользователи» - это имя контроллера, «UserDetail» - это имя действия, а «9615» - это UserId.

Как я могу скрыть имя контроллера и имя действия в URL.

Точно так же: http://www.sample.com/9615

Я написал следующий код в Global.ascx.cs, чтобы скрыть имя действия:

routes.MapRoute(
             "UserDetail",             // Route name
             "Users.mvc/{UserId}",              // URL with parameters
             new { controller = "Users", action = "UserDetail", UserId = "" }  // Parameter defaults
            );

Используя приведенный выше код, я скрыл имя действия и получил этот URL: http://www.sample.com/Users.mvc/9615

Но как я могу скрыть имя контроллера и получить этот URL: http://www.sample.com/9615

Спасибо.

Ответы [ 2 ]

4 голосов
/ 19 декабря 2008

Идея та же. Вы делаете только то, что вы сделали с действием. Однако ваша проблема возникает из-за того, что IIS, вероятно, не отображает www.xyz.com/1234 в среду выполнения ASP.NET. Для этого в IIS7 включите интегрированный режим, а в IIS6 добавьте подстановочное отображение в карту обработчика, которая сопоставляет все с ASP.NET.

Чтобы добавить карту с подстановочными знаками, см. http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx (найдите «URL-адреса без расширения IIS6» на этой странице)

После этого просто добавьте маршрут:

routes.MapRoute("UserDetails", "{UserID}/{*name}", 
    new { controller = "Users", action = "UserDetail" , UserID=""});

Это должно сработать.

2 голосов
/ 21 июля 2012

MVC распознает разницу между "{UserID}" и "{id}", поэтому, если у вас будет маршрут с только "{UserID}" в URL, вам нужно поместить его первым в списке, в противном случае никогда не получит удар. И убедитесь, что значение по умолчанию включает в себя «id», так как он будет постоянно зацикливаться на «UserDetails», если только идентификатор ссылки по умолчанию не сопоставляется с UserID. Я нашел этот формат работает для меня:

routes.MapRoute("UserDetails",
       "{UserID}",
       new { controller = "Users", action = "UserDetail", id = "" }
);
routes.MapRoute(
       "Default", // Route name
       "{controller}/{action}/{id}", // URL with parameters               
       new { controller = "Account", action = "LogOn", id = "" } // Parameter defaults   
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...