我想重定向到同一个控制器中的一个动作,但丢失了路由值(特别是id
值)。事实证明这非常困难。我有这样配置的路线:
context.MapRoute(
"Monitoring_controllerIdSpecified",
"Monitoring/{controller}/{id}/{action}",
new { action = "Status" }
);
context.MapRoute(
"Monitoring_default",
"Monitoring/{controller}/{action}",
new { controller = "Events", action = "Index" }
);
...以及内部类似这样的操作方法EventsController
:
public ActionResult Status(int id) {
if (id > 1000) {
TempData["ErrorMessage"] = "ID too high.";
return RedirectToAction("Index", new { id = (int?)null });
}
// (code to display status)
}
如果我然后访问类似的东西/Monitoring/Events/1001
,RedirectToAction
确实会调用 ,但我会被重定向到/Monitoring?id=1001
而不是仅仅/Monitoring
. 它似乎与第一个路由匹配Monitoring_controllerIdSpecified
,即使该路由具有id
强制路由参数并且我告诉它设置id
为 null,并且奇怪地id
变成了查询字符串键。换句话说,它没有正确清除/删除id
路由值。在传递给的对象中设置id
为空字符串与将其设置为.routeValues
RedirectToAction
null
为什么要这样做,我如何说服它不匹配第一条路线,因为id
已从路线值中完全删除?