C# 调用RedirectToAction时使用的旧路由数据

C# 调用RedirectToAction时使用的旧路由数据,c#,asp.net,asp.net-mvc,redirect,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Redirect,Asp.net Mvc 5,我在ASP.NET MVC 5应用程序中遇到了一些非常奇怪的路由行为 我使用RouteAttributes在以下两个操作中描述URI: [Route("status/{id:int}")] public ActionResult ShipmentStatus(int id) { //do stuff & return partial view } [HttpPut] [Route("delivery/{id:int}")] public ActionResult UpdateDeliv

我在ASP.NET MVC 5应用程序中遇到了一些非常奇怪的路由行为

我使用RouteAttributes在以下两个操作中描述URI:

[Route("status/{id:int}")]
public ActionResult ShipmentStatus(int id)
{ //do stuff & return partial view }

[HttpPut]
[Route("delivery/{id:int}")]
public ActionResult UpdateDelivery(int id, DeliveryModel model)
{
     //do stuff with model to update db
     return RedirectToAction("ShipmentStatus", new { id = model.ShipmentId });
}
假设我向URI
“/shipping/delivery/12345”
提交一个PUT请求,并且模型包含
ShipmentId=54321
。调试时,我看到54321在RoutedData中,重定向到URI
“/shipping/status/54321”
,但是在ShipmentStatus方法中,ASP.NET id注入方法的参数的值为12345,以前在发出原始put请求时发送给控制器的id,而不是传递给RedirectToAction方法的route对象中的值。奇怪的是,在重定向过程中生成了正确的URI&重定向方法中控制器的routedData对象是正确的。注入参数是唯一出现错误的事情

以下是一些描述问题的屏幕截图:

从重定向调用传递的生成URI:

控制器中的RoutedData对象以及调试会话中传递的错误值:


我曾尝试使用RouteValueDictionary,但这无助于解决问题。我还有其他操作(没有一个使用“PUT”,而是post、get和DELETEs),这些操作返回与从
RedirectToAction()
调用生成的
ActionResult
完全相同的
。是否有其他人遇到过此问题?如果是,您是如何解决的?是否有我在这里做的不正确的事情会导致这种行为?

我不确定这一点,但您可以尝试将ShipmentStatus的参数名称从id更改为其他名称,并确保您调试到UpdateDelivery即将重定向的点,以便您对其加倍确定。重命名后,你能截图调试的部分(返回RedirectToAction(“ShipmentStatus”,new{id=id});})和错误消息吗?虽然我不明白为什么会存在这个问题,但实际上你是对的,使参数名不同可以纠正这个问题。