是否可以使用RedirectToAction清除路径值?

Jez*_*Jez 10 asp.net-mvc routes

我想重定向到同一控制器中的操作,但丢失路由值(特别是id值).事实证明这非常困难.我有像这样配置的路由:

context.MapRoute(
    "Monitoring_controllerIdSpecified",
    "Monitoring/{controller}/{id}/{action}",
    new { action = "Status" }
);

context.MapRoute(
    "Monitoring_default",
    "Monitoring/{controller}/{action}",
    new { controller = "Events", action = "Index" }
);
Run Code Online (Sandbox Code Playgroud)

......以及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)
}
Run Code Online (Sandbox Code Playgroud)

如果我然后访问类似的东西/Monitoring/Events/1001,RedirectToAction确实被调用,但我被重定向到/Monitoring?id=1001而不是仅仅/Monitoring.它似乎匹配第一个路由,Monitoring_controllerIdSpecified即使该路由具有id强制路由参数,我告诉它设置id为null,并且奇怪地id变成查询字符串键.换句话说,它没有正确清除/删除id路线值.设置idrouteValues传递给对象的空字符串RedirectToAction只会产生与设置它相同的效果null.

为什么这样做,我怎么能说服它不匹配第一条路线,因为id已经从路线值中完全删除了?

Jez*_*Jez 14

感谢@Slicksim,我发现答案是删除密钥,RouteData.Values而不是将其设置为null:

public ActionResult Status(int id) {
    if (id > 1000) {
        TempData["ErrorMessage"] = "ID too high.";
        RouteData.Values.Remove("id");
        return RedirectToAction("Index");
    }

    // (code to display status)
}
Run Code Online (Sandbox Code Playgroud)