C # Опубликовать AJAX пустой результат json

Aug 19 2020

Я делаю запрос POST ajax для выполнения действия и возврата результата без перезагрузки страницы.
Для этого я использую результат JSON, проблема в том, что когда мое действие «foo.DoSyncAction (id)» требует времени для выполнения, возвращаемые сообщения являются нулевыми.
Например, когда возникает исключение, исключение перехватывается, но его сообщение является нулевым.

То же самое происходит, когда исключение не генерируется, «actionResult» имеет значение null.
Если я использую действие, которое занимает меньше времени, возвращаемые сообщения не будут пустыми или пустыми.
И этого не происходит в режиме отладки, сообщение, возвращаемое на мою страницу, не является нулевым.
Я думаю, что забыл или делаю что-то не так, но не могу понять, что не так.

[HttpPost]
public JsonResult SomeAction(int id)
{
    try
    {
        Foo foo = new Foo();
        var actionResult = foo.DoSyncAction(id);

        return Json(new { ok = true, data = actionResult }, JsonRequestBehavior.AllowGet); ;
    }
    catch (Exception ex)
    {

        return Json(new { data = ex == null ? "null ex" : (string.IsNullOrEmpty(ex.Message) ? "this exception is empty" : ex.Message) }, JsonRequestBehavior.AllowGet);
    }
}

Мой запрос AJAX:

$.ajax({
    url: '@Url.Action("SomeAction", "MyController")',
    dataType: 'json',
    data: { id: myID },
    type: 'POST',
    success: function (response) {
        if (response.ok) {
            // When everything is ok
            console.log(response.data);
        } else {
            // When an exception is thrown
            console.log("An error occurred :  " + response.data);

        }
    },
    error: function (error) {
        console.log("An error occurred :  " + error.responseText);
    }
});

Вот пример похожей ситуации: dotnetfiddle.net/cG2L0u Я использую пример Sagnalrac с ожиданием 10 секунд, и у меня возникла проблема. Список элементов больше не отображается, а console.log возвращает пустую строку. Я использую ASP MVC 5 с .NET 4.8

Ответы

Tanguy Aug 23 2020 at 17:01

Я решил свою проблему, но у меня остались недоразумения.

Мой метод возвращает исключение, систематически связанное с учетной записью, выполняющей метод (поэтому при отладке он работает, а на веб-сервере - нет, потому что используемые учетные записи разные).

Странно то, что мой метод выдает исключение, мне даже удается его поймать и отправить по почте. Но когда контроллер перехватывает исключение, она пуста или равна нулю. Попробую подробнее разобраться в этой проблеме.

Как только я исправил проблему, я попытался добавить таймаут в 2 минуты, и никаких проблем не возникло (я думаю, что в этом примере конфигурация dotnetfiddle отличается от моей, поэтому никаких исключений не обнаруживается).