.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 }
);
}
Помните, что порядок, в котором вы определяете свои маршруты, важен, поскольку они оцениваются в том же порядке механизмом маршрутизации. Таким образом, вы должны всегда размещать конкретные маршруты перед более общими.