2016-10-12 7 views
1

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オブジェクトが正しいです。パラメータの注入は間違っている唯一のものです。ここで

は、問題を描いたいくつかのスクリーンショットです: Browser Console

RouteDataオブジェクトセッションのデバッグに渡される不正な値と一緒にコントローラで: RouteData Debugging

URIがリダイレクト呼び出しから渡された生成

私はこのSO Q & A:https://stackoverflow.com/a/1300844/2359643に従ってRouteValueDictionaryを使用しようとしましたが、この問題の解決には役立ちませんでした。私はRedirectToAction()呼び出しから生成された全く同じActionResultを返す他のアクション(いずれも 'PUT'は使用しませんが、代わりにPOST、GET、DELETE)を持ち、意図したとおりに機能しています。他の誰かがこの問題を経験していますか?もしそうなら、あなたはそれをどのように解決しましたか?私がここで間違ってやっている何かが、この現象を引き起こすでしょうか?

答えて

1

これはわかりませんが、ShipmentStatusのパラメータ名をidから別のものに変更し、UpdateDeliveryがリダイレクトされている点までデバッグしてください。

+0

Owk。名前を変更してエラーメッセージ – Fehintola

+0

の後にRedirectToAction( "ShipmentStatus"、new {id = id}); }を返すことができます。この問題がなぜ発生しているのか分かりませんが、パラメータ名のdistinctは問題を修正します。 – JNYRanger

関連する問題