#c# #model-view-controller #url #routes #rewrite
#c# #модель-представление-контроллер #url #маршруты #url-переписывание
Вопрос:
Я хотел бы переписать URL из
http://localhost:51639/home/index?id=123
Для
http://localhost:51639/home/product
Вот мой код в Global.asax.cs
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
Что я могу сделать? Большое спасибо
Ответ №1:
Важен порядок, потому что MVC сначала выполняет поиск соответствия с помощью RouteCollection и возвращает URL.
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(null, "home/product/{id}", new {
controller = "Home", action = "Index",
id = UrlParameter.Optional}
);
routes.MapRoute("Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new {
controller = "Home", action = "Index",
id = UrlParameter.Optional } // Parameter defaults
);
}
Ответ №2:
Если вы используете MVC 5, вы можете использовать пользовательский параметр маршрута, т.Е. [Route("home/product/{id:int}")]
. Это действительно полезно для одноразовых маршрутов, и поскольку вы можете указать тип в переданном параметре, он не конфликтует с другими глубокими маршрутами, которые вам могут понадобиться.
http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx