ASP.NET MVC 3 ベースのアプリケーションを開発していますが、コントローラー アクションの 1 つに対して (jQuery 経由で) Ajax POST を実行しようとすると、断続的な問題が発生します。コントローラー アクションが正常に呼び出され、コードが期待どおりに実行される場合もありますが、コントローラー アクションが呼び出されず、ブラウザーは基本的に、要求が最終的にタイムアウトするまでそこでハングすることもあります。
問題を一貫して再現できないため、イライラします。一方、それは頻繁に発生するため、通常はあまり労力をかけずに発生させることができます. Firebug の [Net] タブで、ブラウザが確実に POST リクエストを作成し、正しい URL にアクセスしていることを確認できます。私がまだ行っていないが、他の場所で提案されているのを見たことがあることの 1 つは、Fiddler を途中でセットアップして、要求がどこまで到達するかを確認することです。しかし、それが Web サーバー (IIS) まで到達すると仮定すると、これをデバッグするための次のステップは何ですか? 私は Windows/.NET/IIS に強いバックグラウンドを持っていないため、どこから調べればよいかわかりません。
アップデート:
POST を実行する jQuery コードは次のとおりです。
var self = this;
var jsonData = foo.toJSONString();
$.ajax({
type: 'POST',
dataType: 'json',
url: '/MyController/AddFoo',
data: { foo: jsonData },
success: function (data) {
self.showSuccessfulSubmissionDialog();
},
error: function (xhr, textStatus, error) {
self.showUnsuccessfulSubmissionDialog(xhr.responseText);
}
});
コントローラー アクションの C# コードは次のとおりです。
[HttpPost]
[Authorize]
public JsonNetResult AddFoo(string foo)
{
var fooObject = JsonConvert.DeserializeObject<Foo>(foo, SerializerSettings);
try
{
// Do something with fooObject
}
catch (Exception ex)
{
var formattedString = ex.Message.Replace("\r\n", " ");
return BuildErrorResult("An error occured writing data to the server: " +
formattedString);
}
return BuildSuccessResult();
}
細かな部分(特に変数名)が若干変更されていますが、要点は以下のとおりです。また、前述のように、これが「壊れる」場合、Firebug は POST が実行されたと主張しますが、コントローラー アクションの開始時にブレークポイントに到達しません。そのため、途中でボールがドロップされます。そうでない場合を除き、コントローラーのアクションは問題なく実行されます。