.NET MVC 3 пытается заставить RedirectToAction следовать формату {controller}/{action}/{id}/{GUID}

Я должен пропустить что-то очевидное здесь.

Я хотел бы убедиться, что все RedirectToAction следуют формату {controller}/{action}/{id}/{GUID} (например, http://www.mysite.com/report/edit/23/0975a566-983a-4414-962c-0ab1a921e89d

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
    );

    routes.MapRoute(
        "Custom", // Route name
        "{controller}/{action}/{id}/{GUID}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional, GUID = UrlParameter.Optional} // Parameter defaults
    );

}

Я использую следующее в контроллере:

return RedirectToAction("edit", "report", new { id = id, GUID = getGUIDFromId(id) });

Однако я просто получаю следующий результат:

http://www.mysite.com/report/edit/23?0975a566-983a-4414-962c-0ab1a921e89d

У меня был хороший поиск по этому вопросу, но я ничего не нашел об этой конкретной проблеме (вероятно, потому что это очевидно).

Спасибо заранее

1 ответ

Просто измените порядок ваших маршрутов:

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

    routes.MapRoute(
        "Custom",
        "{controller}/{action}/{id}/{GUID}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional, GUID = UrlParameter.Optional }
    );

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

Помните, что порядок, в котором вы определяете свои маршруты, важен, поскольку они оцениваются в том же порядке механизмом маршрутизации. Таким образом, вы должны всегда размещать конкретные маршруты перед более общими.

Другие вопросы по тегам