我正在尝试使用适当的 REST
URL 与 MVC
结合使用。为此,我将默认路由从以下内容切换:
{controller}/{action}/{id}
to
{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
提供的功能。