试图弄清楚如何从我的.ASMX
调试泛型500错误JS:
function TestError() {
return $.ajax({
type: "POST",
url: 'Order.asmx/TestError',
contentType: "application/json; charset=utf-8"
});
}
$.when(TestError()).then(function (err) {
console.log(err);
});
C#
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public object TestError()
{
try
{
throw new Exception("Testing error");
}
catch (Exception ex)
{
return ex;
}
}
结果:
它甚至没有记录err
参数。有什么想法吗?
修改
将错误添加到原始的Ajax调用是让我记录信息,但仍然是通用&无用的。
http://i42.tinypic.com/2v27fgo.jpg
修改2
回答了我自己的问题,并要求跟进:
答案 0 :(得分:1)
在向正确的方向踢了一脚并进一步挖掘后,我发现这个问题是双重的。
首先,Dave Ward实际上pointed me in the right direction建议我在web.config中关闭customErrors
。实际上并非如此,但非常接近。
实际的罪魁祸首是Elmah错误处理模块。禁用后,我能够转发自定义错误,无论customErrors
是on
还是off
。
第二个问题是虽然我现在可以处理错误,但仍然无法传递System.Exception
个对象。我发现这是因为Exception.TargetSite
属性不可序列化。
我通过创建自己的JsonException
类来解决这个问题,并且只包含System.Exception
类的可序列化属性(为简单起见,这里省略)。
public class JsonException
{
public string Source { get; set; }
public string Message { get; set; }
public string StackTrace { get; set; }
public JsonException(Exception ex)
{
this.Source = ex.Source;
this.Message = ex.Message;
this.StackTrace = ex.StackTrace;
}
}
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public object TestError()
{
try
{
throw new Exception("Testing error");
}
catch (Exception ex)
{
return new JsonException(ex);
}
}
现在我终于得到了我想要的数据:
答案 1 :(得分:0)
我会改为:
$.ajax({
type: "POST",
url: 'Order.asmx/TestError',
contentType: "application/json; charset=utf-8",
error: function (XMLHttpRequest,textStatus,errorThrown){ console.log(errorThrown); }
});