我想重定向到同一个控制器中的一个动作,但丢失了路由值(特别是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为空字符串与将其设置为.routeValuesRedirectToActionnull
为什么要这样做,我如何说服它不匹配第一条路线,因为id已从路线值中完全删除?