Переключение на {controller} / {id} / {action} нарушает RedirectToAction

Я пытаюсь использовать правильные URL-адреса REST с 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 / Заказчик / 23 / Поиск . Пока он должен быть в / Покупатель / Поиск . Каким-то образом он запоминает 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 / Утвердите вместо использования ActionLink и RedirectToAction ,но предпочел бы придерживаться функций, предоставляемых MVC .

9
задан Amir Ismail 6 July 2011 в 13:40
поделиться