ASP.NET中的jQuery ajax with customErrors mode =“On”

任何想法如何检索服务器端抛出的原始exception
ajax使用jQuery调用并使用

customErrors mode =“On”

在web.config中。

如果mode =“Off”,我可以使用此函数获取错误:

error: function(xhr, status, error) { var error = JSON.parse(xhr.responseText); alert(error.Message); } 

最好的办法是将服务器方法移动到具有自己的web.config的不同主机中。 如果您以前从未这样做过,那么ASP.NET Web Services是一个很好的起点。

如果这不实用,您可以将整个服务器方法包装在try ... catch并修改方法,以使其成功的返回值包含exception信息。 这有一些缺点:您必须修改$.ajax success处理程序以手动检查错误,并且您只捕获服务器方法中发生的exception(但您会错过http超时,DNS解析错误,等等。)。

我有同样的问题,发现了一些不同的解决方案:

您可以在web.config中禁用特定位置的客户端错误。

      

但是,请注意禁用自定义错误时的customerrors 安全性可用性 。

另一个(更安全的解决方案)是在错误页面上使用ajax-complete-callback-handler和meta标签来检测错误并将响应转发给“正常”错误函数。 为此,您需要在自定义错误页面上包含错误状态代码,例如:

  Oops   ... 

然后,您可以从XmlHttpRequest.responsText中解析出状态代码,并在检测到错误状态代码时调用正常错误函数。

 $.ajax({ url: '/ajax/mydata.ashx', dataType: 'json', complete: function(XMLHttpRequest, textStatus) { var statuscodeRegex = /content="(.*?)"/; if (statuscodeRegex.test(XMLHttpRequest.responseText) && statuscodeRegex.exec(XMLHttpRequest.responseText)[0] != 200) this.error(XMLHttpRequest, textStatus, "Oh no... an error!"); }, success: function(myData) { //Do something useful... }, error: function(XMLHttpRequest, textStatus, errorThrown) { //Error... } });