Я пытаюсь использовать правильные REST
URL с MVC
. Для этого я переключил маршрутизацию по умолчанию с:
{controller}/{action}/{id}
до
{controller}/{id}/{action}
так вместо:
/Customer/Approve/23
есть сейчас
/Customer/23/Approve
ActionLink работает нормально, но следующий код в CustomerController:
[CustomAuthorize]
[HttpGet]
public ActionResult Approve(int id)
{
_customerService.Approve(id);
return RedirectToAction("Search"); //Goes to bad url
}
заканчивается на URL /Customer/23/Search
. Пока оно должно идти на /Customer/Search
. Как-то запоминается 23 (id)
.
Вот мой код маршрутизации в global.cs
routes.MapRoute(
"AdminRoute", // Route name
"{controller}/{id}/{action}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { id = new IsIntegerConstraint() }
);
routes.MapRoute(
"Default",
"{controller}/{action}",
new { controller = "Home", action = "Index" });
Если я переключаю две функции, RedirectToAction
начинает работать, но с использованием:
Html.ActionLink("Approve", "Approve", new { Id = 23})
Теперь генерирует /Customer/Approve?id=23
вместо /Customer/23/Approve
.
Я мог бы указать прямые URL-адреса, такие как ~/Customer/23/Approve
, вместо использования ActionLink
и RedirectToAction
, но предпочел бы придерживаться функций, предоставляемых MVC
.