JQuery отложил AJAX и 500 ошибок сервера - PullRequest
1 голос
/ 22 декабря 2011

Попытка выяснить, как отладить общие 500 ошибок из моего .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;
    }
}

Результат:

enter image description here

Это даже не запись аргумента err. Есть идеи?

Редактировать

добавление ошибки к исходному вызову Ajax дает мне информацию о входе в систему, но все же универсально и бесполезно.

http://i42.tinypic.com/2v27fgo.jpg

enter image description here

Редактировать 2

Ответили на мой вопрос и задали вопрос:

Удаление свойств унаследованного объекта в C #

Ответы [ 2 ]

1 голос
/ 22 декабря 2011

После удара в правильном направлении и дальнейшего рытья я обнаружил, что эта проблема была двойной.

Сначала Дейв Уорд на самом деле указал мне в правильном направлении в предложении я отключаю customErrors в web.config.На самом деле это было не так, но очень близко.

Фактический виновник - модуль обработки ошибок 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);
    }
}

И вот, наконец, я получаю нужные данные:

enter image description here

0 голосов
/ 22 декабря 2011

Я бы изменил на это:

$.ajax({
        type: "POST",
        url: 'Order.asmx/TestError',
        contentType: "application/json; charset=utf-8",
        error: function (XMLHttpRequest,textStatus,errorThrown){ console.log(errorThrown); }
    });
...