MVC — RegisterRoutes

#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