Application_Error mondiale.asax pas la capture des erreurs dans WebAPI

Pour un projet que je suis en train de travailler sur, l'une des choses que nous mettons en œuvre est quelque chose que nous avons de code dans certains de mes anciennes équipes ASP.NET et les projets MVC - un Application_Error exception catcher qui envoie un e-mail à l'équipe de développement à l'exception de l'expérience et de la plupart des détails pertinents.

Voici à quoi il ressemble:

Mondiale.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 "petit" problème, mais lorsque j'ai intentionnellement une partie de code de lever une exception afin de tester ce mécanisme...

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
}

Le front-end JavaScript est immédiatement interception d'un HTTP 500 demande, mais le mondial.asax.cs code indiqué ci-dessus n'est pas atteint (j'ai mis un point d'arrêt sur la première exécution de la ligne de la méthode.)

Question: De quelle façon puis-je obtenir le "vieux" Application_Error gestionnaire de l'expédition d'erreur e-mails, de sorte que notre équipe de développeurs peut plus facilement debug notre application?

  • Vous pourriez résumé de votre gestion des erreurs de logique dans une méthode distincte que Application_Error appels, envelopper le Web API corps de la méthode dans un try/catch, puis manuellement passer l'erreur logique de l'abstraction de la méthode de Web les erreurs de l'API. Pas de la façon la plus propre, j'en suis sûr, mais il devrait être très simple à mettre en œuvre et "fonctionne". Pour une méthode plus propre que vous pourriez regarder la gestion des exceptions dans ASP.NET l'API Web.
  • Je suis d'accord que c'est une bonne "juste le faire fonctionner" suggestion. La raison pour laquelle je demande c'est que d'avoir un try/catch dans chaque méthode de l'API est en fait ce que je suis en train de sortir de, par ma tech responsable de l'orientation. Si tout le reste échoue, notre équipe peut l'utiliser comme une solution de repli, si. Il sera juste très désagréable modèle.
  • J'ai édité mon dernier commentaire. Regarde le lien que j'ai fourni, et un coup d'oeil à l'exception des filtres. Qui ressemble à une manière décente pour éviter d'avoir try/catch dans toutes vos API Web le corps de méthode.
  • Que la liquidation de travail pour moi. Pourriez-vous faire une réponse de votre commentaire que l'utilisation d'un Filtre d'Exception est une meilleure façon de le faire?
InformationsquelleAutor Andrew Gray | 2015-02-27