ASP.NET MVC 5アプリケーション内のルーティングに関するいくつかの非常に奇妙な動作が発生しています。私は、次の2つのアクションでURIを記述するためにRouteAttributesを使用していRedirectToActionを呼び出すときに使用されていた古いルートデータ
:
[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 "/shipment/delivery/12345"
にPUTリクエストを提出し、モデルがShipmentId = 54321
が含まれていることを言ってみましょう。デバッグすると、54321がRouteData内にあり、リダイレクトがURI "/shipment/status/54321"
になっていますが、ShipmentStatusメソッドの内部では、ASP.NET IDによってメソッドに注入されたパラメータの値は12345であり、以前にコントローラに送信されたID RedirectToActionメソッドに渡されたルートオブジェクトの値の代わりに、元のput要求が行われたとき。奇妙な部分は、リダイレクト中に正しいURIが生成されたことです。&リダイレクトされたメソッド内のコントローラのRouteDataオブジェクトが正しいです。パラメータの注入は間違っている唯一のものです。ここで
RouteDataオブジェクトセッションのデバッグに渡される不正な値と一緒にコントローラで:
URIがリダイレクト呼び出しから渡された生成
私はこのSO Q & A:https://stackoverflow.com/a/1300844/2359643に従ってRouteValueDictionaryを使用しようとしましたが、この問題の解決には役立ちませんでした。私はRedirectToAction()
呼び出しから生成された全く同じActionResult
を返す他のアクション(いずれも 'PUT'は使用しませんが、代わりにPOST、GET、DELETE)を持ち、意図したとおりに機能しています。他の誰かがこの問題を経験していますか?もしそうなら、あなたはそれをどのように解決しましたか?私がここで間違ってやっている何かが、この現象を引き起こすでしょうか?
Owk。名前を変更してエラーメッセージ – Fehintola
の後にRedirectToAction( "ShipmentStatus"、new {id = id}); }を返すことができます。この問題がなぜ発生しているのか分かりませんが、パラメータ名のdistinctは問題を修正します。 – JNYRanger