Resultado json vazio de C # Post AJAX

Aug 19 2020

Eu faço uma solicitação POST ajax para executar uma ação e retornar um resultado sem recarregar a página.
Para isso utilizo um Resultado JSON, o problema é que quando minha ação "foo.DoSyncAction (id)" demora para ser executada, as mensagens retornadas são nulas.
Por exemplo, quando uma exceção é levantada, a exceção é capturada, mas sua mensagem é nula.

A mesma coisa acontece quando nenhuma exceção é lançada, "actionResult" é nulo.
Se eu usar uma ação que leva menos tempo, as mensagens retornadas não são nulas ou vazias.
E isso não acontece em modo de depuração, a mensagem retornada para minha página não é nula.
Acho que esqueci ou estou fazendo algo errado, mas não consigo descobrir o que está errado.

[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);
    }
}

Minha consulta 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);
    }
});

Aqui está um exemplo de situação semelhante: dotnetfiddle.net/cG2L0u Eu uso o exemplo Sagnalrac com uma espera de 10 segundos e meu problema ocorreu. A lista de itens não é mais exibida e o console.log retorna uma string vazia. Estou usando ASP MVC 5 com .NET 4.8

Respostas

Tanguy Aug 23 2020 at 17:01

Resolvi meu problema, mas ainda tenho alguns mal-entendidos.

Meu método retorna uma exceção sistematicamente relacionada à conta que está executando o método (é por isso que funciona em debug, enquanto em um servidor web não funciona, porque as contas utilizadas são diferentes).

O estranho é que meu método lança uma exceção, eu até consigo pegar e enviar pelo correio. Mas quando o controlador detecta a exceção, ela está vazia ou nula. Vou tentar examinar mais de perto esse problema.

Depois de consertar o problema, tentei adicionar um tempo limite de 2 minutos, e nenhum problema ocorreu (acho que no exemplo, dotnetfiddle tem uma configuração diferente da minha, é por isso que nenhuma exceção aparece).