• Super User

    ASP.net MVC: Exception e chiamata AJAX

    Ciao a tutti,
    sto realizzando un'applicazione basata su ASP.net MVC.

    Tramite Ajax effettuo la chiamata ad diversi metodo, esempio può essere:

    
    public ActionResult MyMethod(DateTime ref_date) { 
                try
                {
                    //code
    
                    return new FileContentResult(stream.ToArray(), "application/pdf");
                }
                catch (Exception ex)
                {
                    return StatusCode((int)HttpStatusCode.InternalServerError, ex.Message);
                }
    }
    
    

    Se l'eccezione non scatta, nella success della chiamata ajax eseguo la procedura desiderata...

    Se viene generata l'eccezione, scatta l'error della chiamata ajax, ma non riesco a catturare in alcun modo l'ex.Message:

    
    error: function (err, type, httpStatus) {
        console.log(err);
        var failureMessage = 'Error occurred in ajax call ' + err.status + " - " + err.responseText + " - " + httpStatus;
        console.log(failureMessage);
        console.log(err.responseText);
    }
    
    
    

    Se ad esempio il metodo va in eccezione perchè il file usato come modello è lockato da un altro processo, nell'eccezione del metodo lo vedo, nella chiamata Ajax no, non riesco a catturarlo.

    Probabilmente sbaglio il tipo di ritorno in caso di exception?

    Grazie.


  • Super User

    Ho trovato l'errore, modificando questa parte della chiamata ajax:

    • se la risposta è success allora il type atteso è un blob
    • se la risposta è error allora il type atteso è un text
    
    xhr: function () {
                var xhr = new XMLHttpRequest();
                xhr.onreadystatechange = function () {
                    if (xhr.readyState == 2) {
                        if (xhr.status == 200) {
                            xhr.responseType = "blob";
                        } else {
                            xhr.responseType = "text";
                        }
                    }
                };
                return xhr;
            },
    
    

    Grazie! 😉