我想用MVC
正確使用REST
的網址。要做到這一點,我切換默認路由來自:切換到{controller}/{id}/{action}休息RedirectToAction
{controller}/{action}/{id}
到
{controller}/{id}/{action}
所以不是:
/Customer/Approve/23
現在有
/Customer/23/Approve
ActionLink的似乎工作確定,但CustomerControlle中的以下代碼r:
[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
提供的功能。
不知該ID的UrlParameter.Optional對這個 –
怪異的是,任何影響UrlParameter只有一個值「可選」,像「必需」這樣的東西可能會使它工作。 –