Risultato json vuoto post AJAX C #

Aug 19 2020

Faccio una richiesta POST ajax per eseguire un'azione e restituire un risultato senza ricaricare la pagina.
Per questo utilizzo un risultato JSON, il problema è che quando la mia azione "foo.DoSyncAction (id)" impiega un po 'di tempo per essere eseguita, i messaggi restituiti sono nulli.
Ad esempio, quando viene sollevata un'eccezione, l'eccezione viene rilevata, ma il suo messaggio è nullo.

La stessa cosa accade quando non viene generata alcuna eccezione, "actionResult" è nullo.
Se utilizzo un'azione che richiede meno tempo, i messaggi restituiti non sono nulli o vuoti.
E non avviene in modalità debug, il messaggio restituito alla mia pagina non è nullo.
Penso di aver dimenticato o sto facendo qualcosa di sbagliato, ma non riesco a capire cosa c'è che non va.

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

La mia query 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);
    }
});

Ecco un esempio di una situazione simile: dotnetfiddle.net/cG2L0u Uso l'esempio di Sagnalrac con un'attesa di 10 secondi e il mio problema si è verificato. L'elenco degli elementi non viene più visualizzato e console.log restituisce una stringa vuota. Sto usando ASP MVC 5 con .NET 4.8

Risposte

Tanguy Aug 23 2020 at 17:01

Ho risolto il mio problema, ma ho ancora dei malintesi.

Il mio metodo restituisce un'eccezione sistematicamente correlata all'account che esegue il metodo (ecco perché in debug funziona, mentre su un server web no, perché gli account utilizzati sono diversi).

La cosa strana è che il mio metodo genera un'eccezione, riesco persino a prenderla e inviarla per posta. Ma quando il controller rileva l'eccezione, è vuota o nulla. Cercherò di dare un'occhiata più da vicino a questo problema.

Una volta risolto il problema, ho provato ad aggiungere un timeout di 2 minuti e non si è verificato alcun problema (penso che nell'esempio dotnetfiddle abbia una configurazione diversa dalla mia, ecco perché non compare alcuna eccezione).