问题
Trying to figure out how to debug generic 500 errors from my .ASMX
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;
}
}
Result:
It's not even logging the err
argument. Any ideas?
Edit
adding the error to the original Ajax call is getting me logging info, but still generic & useless.
http://i42.tinypic.com/2v27fgo.jpg
Edit 2
Answered my own question and have asked a follow-up:
Removing properties of an inherited object in C#
回答1:
After a kick in the right direction and further digging I actually found this problem was twofold.
First, Dave Ward actually pointed me in the right direction in suggesting I turn off customErrors
in the web.config. It was actually not that, but very close.
The actual culprit is the Elmah error handling module. After disabling it I was able to relay custom errors regardless of whether customErrors
was on
or off
.
The second issue was that although I could now handle the errors, I still couldn't pass System.Exception
objects. I discovered this is because the Exception.TargetSite
property is not serializable.
I got around the problem by creating my own JsonException
class and only including the serializable properties of the System.Exception
class (abbreviated here for simplicity).
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);
}
}
And now I finally get the data I want:
回答2:
I would change to this:
$.ajax({
type: "POST",
url: 'Order.asmx/TestError',
contentType: "application/json; charset=utf-8",
error: function (XMLHttpRequest,textStatus,errorThrown){ console.log(errorThrown); }
});
来源:https://stackoverflow.com/questions/8607862/jquery-deferred-ajax-500-server-errors