我正在開發基於ASP.NET MVC 3的應用程序,並在嘗試執行某個控制器操作的Ajax POST(通過jQuery)時看到間歇性問題。有時,控制器動作被調用得很好,代碼按預期執行,但其他時候,控制器動作從不被調用,瀏覽器基本掛在那裏直到請求最終超時。Ajax POST有時無法調用ASP.NET MVC控制器動作
這很令人沮喪,因爲我們不能始終如一地重現問題。另一方面,這經常發生,我們通常可以在不付出太多努力的情況下實現。我可以在Firebug的「Net」標籤中看到瀏覽器明確發出POST請求,並且我知道它正在打印正確的URL。有一件事我還沒有完成,但我在別處看到過的建議是在中間設置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被執行但在控制器行動開始時我從未落在我的斷點處的時候,所以在這個方向的某個地方,球落下了。除非那些時候沒有,並且控制器動作毫不費力地執行。
可以顯示POST和服務器操作的代碼嗎? – rae1
如果您使用的是IIS7,則可以考慮使用「失敗的請求跟蹤」來查看您可以找到的內容。 http://www.iis.net/learn/troubleshoot/using-failed-request-tracing/using-failed-request-tracing-rules-to-troubleshoot-application-request-routing-arr – HackedByChinese
@ rae1n,I've添加了客戶端POST和服務器端控制器操作的代碼。 –