Per un progetto su cui sto lavorando, una delle cose che stiamo implementando è qualcosa su cui abbiamo codice in alcuni dei miei vecchi progetti ASP.NET e MVC più vecchi - un Application_Error
catcher di eccezioni che invia un'e-mail al team di sviluppo con l'esperienza di eccezione e i dettagli più rilevanti.Application_Error in global.asax non rileva errori in WebAPI
Ecco come appare:
Global.asax:
protected void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
string path = "N/A";
if (sender is HttpApplication)
path = ((HttpApplication) sender).Request.Url.PathAndQuery;
string args = string.Format("<b>Path:</b> {0}", path);
// Custom code that generates an HTML-formatted exception dump
string message = Email.GenerateExceptionMessage(ex, args);
// Custom code that sends an email to the dev team.
Email.SendUnexpectedErrorMessage("Some App", message);
}
Un problema "minore", anche se - quando ho volutamente ho una parte del codice un'eccezione al fine di testare questo meccanismo ...
public static void GetMuffinsByTopping(string topping)
{
throw new Exception("Test Exception!", new Exception("Test Inner Exception!!!"));
// Actual repository code is unreachable while this test code is there
}
il front-end JavaScript viene immediatamente intercettando una richiesta HTTP 500, ma non il codice global.asax.cs ted di cui sopra non è stato raggiunto (ho impostato un punto di interruzione sulla prima riga l'esecuzione del metodo.)
Domanda: In che modo posso ottenere il "vecchio" Application_Error
gestore di inviare messaggi di posta elettronica di errore, in modo che il nostro team di gli sviluppatori possono più facilmente eseguire il debug della nostra applicazione?
È possibile astrarre la logica di gestione degli errori in un metodo separato chiamato 'Application_Error', racchiudere il corpo del metodo API Web in un try/catch, quindi passare manualmente la logica di errore al metodo astratto dagli errori dell'API Web. Non sono il modo più pulito che sono sicuro, ma dovrebbe essere semplice da implementare e "funziona". Per un metodo più pulito si può guardare [Gestione delle eccezioni in API Web ASP.NET] (http://www.asp.net/web-api/overview/error-handling/exception-handling). – mason
Sono d'accordo che è un buon suggerimento "basta farlo funzionare". Il motivo per cui lo chiedo è che avere un 'try/catch' in ogni metodo API è in realtà ciò che sto cercando di scappare, secondo le indicazioni del mio capo tecnico. Se tutto il resto fallisce, il nostro team può usare questo come un ripiego, però. Sarà solo un modello molto odioso. –
Ho modificato il mio ultimo commento. Guarda il link che ho fornito e dai un'occhiata ai filtri delle eccezioni. Sembra un modo decente per evitare di provare/catturare tutti i corpi dei metodi API Web. – mason