Torna indietro   Hardware Upgrade Forum > Software > Programmazione

KIOXIA 3 SSD in prova: Exceria e Exceria Plus (M.2 PCIe) e Exceria SATA
KIOXIA 3 SSD in prova: Exceria e Exceria Plus (M.2 PCIe) e Exceria SATA
La nuova linea di SSD consumer di KIOXIA approda ora nei negozi, online e non. Sono giunti in redazione tre modelli appartenenti a serie differenti, che abbiamo analizzato per capire bene come vanno e come si posizionano nel mercato. Ecco le nostre considerazioni
Hyundai Ioniq elettrica: ansia da batteria e pareri ragionati di un utilizzatore curioso
Hyundai Ioniq elettrica: ansia da batteria e pareri ragionati di un utilizzatore curioso
Due settimane con una delle auto elettriche più apprezzate e, a modo suo, nemmeno molto cara. Ecco diverse considerazioni fuori dai denti, molto personali, da parte di chi l'ha guidata con curiosità e quel filo di diffidenza che porta a farsi domande. Trovando anche delle risposte, probabilmente solo temporanee, su un tema di cui si parlerà sempre di più.
Canon svela EOS R5 e R6, due nuove mirrorless 35mm avanzate e performanti
Canon svela EOS R5 e R6, due nuove mirrorless 35mm avanzate e performanti
La EOS R5 è una "big megapixel" ad alte performance, che si pone in concorrenza con Sony A7R e Nikon D850 - in casa Canon, può essere considerata la versione mirrorless della 5Ds. La EOS R6, dal canto suo, può essere considerata l'erede spirituale della 7D Mark II, con assonanze che arrivano a scomodare nientemeno che la EOS-1D X Mark III.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-05-2020, 00:47   #1
robertino_salemi
Senior Member
 
L'Avatar di robertino_salemi
 
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 922
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:
Codice:
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:
Codice:
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.
__________________
robertino_salemi è offline   Rispondi citando il messaggio o parte di esso
Old 23-05-2020, 09:03   #2
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2535
Ciao,
ora non ho modo di provare direttamente, io procederei così:

1. Verifica dai developer tools del browser (nella scheda Net) che il messaggio dell'eccezione arrivi al client (dovrebbe essere nel body o in un qualche header della risposta).

2a. Se il messaggio arriva allora devi fare qualche correzione nel javascript. Non ho capito che metodo stai utilizzando per effettuare la richiesta (jQuery ajax?), guarderei la documentazione per capire dove dovresti trovare il body o gli header della risposta

2b. Se il messaggio non arriva allora devi fare una correzione lato server, forse il metodo che stai utilizzando non restituisce il messaggio al client (anche se mi sembra strano)
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 25-05-2020, 17:32   #3
robertino_salemi
Senior Member
 
L'Avatar di robertino_salemi
 
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 922
Hai ragione, nella scheda Network del DevTools dovrebbe esserci, ma non trovo nulla...





Non c'è nulla neanche nel tab Response...
__________________

Ultima modifica di robertino_salemi : 25-05-2020 alle 18:41.
robertino_salemi è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2020, 07:54   #4
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2535
Però attenzione, lo status code che hai restituito lato server dovrebbe essere 500:
https://developer.mozilla.org/en-US/...TTP/Status/500

mentre il client ha ricevuto 406:
https://developer.mozilla.org/en-US/...TTP/Status/406

Da quello che leggo potrebbe essere dovuto al fatto che nella Request è specificato Accept:application/pdf (non si vede nel tuo screenshot ma provo a supporlo, dovrebbe essere nei Request Headers) e lato server in caso di errore non restituisci un application/pdf.
Come hai effettuato la richiesta ajax? Puoi postare l'intero snippet javascript?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2020, 14:53   #5
robertino_salemi
Senior Member
 
L'Avatar di robertino_salemi
 
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 922
Esatto, lo StatusCode è diverso e non mi spiego come mai.

Certo, ecco la chiamata Ajax:
Codice:
    $.ajax({
        type: "POST",
        url: url_with_params,
        headers: {
            'Authorization': 'Bearer ' + sessionStorage.getItem(JWTTokenName),
            'Content-Type': "application/json;charset=UTF-8"
        },
        // Seems like the only way to get access to the xhr object
        xhr: function () {
            var xhr = new XMLHttpRequest();
            xhr.responseType = 'blob'
            return xhr;
        },
        data: jsonData,
        cache: true,
        success: function (data, status, xhr) {
            var blob = new Blob([data], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });

            var downloadUrl = URL.createObjectURL(blob);

            //Get fileName
            var headers = xhr.getAllResponseHeaders();
            var arr = headers.trim().split(/[\r\n]+/);
            // Create a map of header names to values
            var headerMap = {};
            arr.forEach(function (line) {
                var parts = line.split(': ');
                var header = parts.shift();
                var value = parts.join(': ');
                headerMap[header] = value;
            });
            var fileName = headerMap["content-disposition"];

            var a = document.createElement("a");
            a.href = downloadUrl;
            a.download = fileName;
            document.body.appendChild(a);
            a.click();
            document.body.removeChild(a);
        },
        error: function (err, type, httpStatus) {
            var failureMessage = 'Error occurred in ajax call ' + err.status + " - " + err.responseText + " - " + httpStatus;
			console.log(failureMessage);
        }
    });
__________________
robertino_salemi è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2020, 15:42   #6
robertino_salemi
Senior Member
 
L'Avatar di robertino_salemi
 
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 922
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

Codice:
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!
__________________
robertino_salemi è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2020, 19:44   #7
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2535
Ok ottimo! Scusa, volevo provare a riprodurre il problema ma non ho trovato il tempo di farlo.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2020, 12:15   #8
robertino_salemi
Senior Member
 
L'Avatar di robertino_salemi
 
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 922
Nessun problema!
__________________
robertino_salemi è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


KIOXIA 3 SSD in prova: Exceria e Exceria Plus (M.2 PCIe) e Exceria SATA KIOXIA 3 SSD in prova: Exceria e Exceria Plus (M...
Hyundai Ioniq elettrica: ansia da batteria e pareri ragionati di un utilizzatore curioso Hyundai Ioniq elettrica: ansia da batteria e par...
Canon svela EOS R5 e R6, due nuove mirrorless 35mm avanzate e performanti Canon svela EOS R5 e R6, due nuove mirrorless 35...
Aorus 17G XB, l'approccio di Gigabyte al mondo dei notebook gaming Aorus 17G XB, l'approccio di Gigabyte al mondo d...
Ryzen 9 3900XT, Ryzen 7 3800XT e Ryzen 5 3600XT: aspettando Zen 3 Ryzen 9 3900XT, Ryzen 7 3800XT e Ryzen 5 3600XT:...
Thermaltake, tappetino M900 XXL RGB: una...
TIM: arriva la fibra ottica a 100Gbps in...
ho.mobile attiva il VoLTE per tutti gli ...
AMD EPYC Milan Zen 3: numero di core inv...
Windows 10 May 2020 Update, OneDrive pu&...
Cradlepoint offre i suoi servizi edge 5G...
OnePlus Buds ufficialmente in arrivo. Ec...
Google Pixel Buds: ecco le cuffie che sa...
GeForce RTX 2000 di fascia alta in pensi...
Master, slave, blacklist: terminologia d...
Con Intel EMA responsabili IT e aziende ...
TomTop, ecco le offerte valide oggi fra ...
Molestie sessuali in Ubisoft: lasciano a...
Amazon, una settimana di sconti sui note...
La norme sulla fatturazione elettronica ...
K-Lite Codec Pack Update
K-Lite Mega Codec Pack
K-Lite Codec Pack Full
IObit Uninstaller
OCCT
SmartFTP
CrystalDiskInfo
Firefox Portable
Firefox 78.0.2
Radeon Software Adrenalin 2020 20.7.1
Driver NVIDIA GeForce 451.67 WHQL
K-Lite Codec Pack Standard
K-Lite Codec Pack Basic
Opera Portable
Opera 69
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:57.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Served by www1v