我正在开发基于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和服务器端控制器操作的代码。 –