# ASP.NET Core : Gérer les erreurs

> Afficher une page d’erreur personnalisé en ASP.NET Core est très simple, mais il y a quelques pièges à éviter. Pour afficher une page d’erreur (erreur 500) il…

- Auteur: Jérôme Giacomini
- Langue: fr
- URL canonique: [ASP.NET Core : Gérer les erreurs](https://jeromegiacomini.net/fr/articles/2019/11/05/asp-net-core-gerer-les-erreurs)
- Publié le: 2019-11-05
- Dernière modification: 2026-09-05
- Thèmes: ASP.NET Core, .NET, C#

Afficher une page d’erreur personnalisé en ASP.NET Core est très simple, mais il y a quelques pièges à éviter.

Pour afficher une page d’erreur (erreur 500) il suffit d’écrire la ligne de code suivante :

```csharp

app.UseExceptionHandler("Error"); 
```


Pour afficher les autres types d’erreurs (page 404, etc…) il suffit d’appeler la méthode suivante :

```csharp

app.UseStatusCodePagesWithRedirects("/StatusCode?code={0}"); 
```


Malheureusement, **ce n&#8217;est pas aussi simple** !
Si votre site Web ASP.NET Core héberge des WebAPI elles aussi seront affecté par ces modifications

## Exclure les API des pages d’erreurs personnalisées

Dans ces cas-là, j’ai la chance de pouvoir invoquer [un magicien d’ASP.NET Core](https://blogs.infinitesquare.com/users/touvre) qui m’aiguille vers la solution pour gérer ces cas épineux. D’ailleurs je vous conseille fortement sa série d’article sur l’utilisation d’[User defined function avec EF Core](https://blogs.infinitesquare.com/posts/divers/user-defined-functions-sql-server-entity-framework-usages-et-optimisations-partie-1).

### Modifier la gestion des StatusCode

Pour modifier l’affichage de la page gérant les **StatusCode **il faudra donc passer un **StatusCodePagesOptions **et exclure toute les routes qui commencent par “api”.

```csharp

app.UseStatusCodePages(new StatusCodePagesOptions()
{
            HandleAsync = ctx =>
            {
                if (ctx.HttpContext.Request.Path != null &amp;&amp;
                !ctx.HttpContext.Request.Path.Value.StartsWith("api"))
                {
                    ctx.HttpContext.Response.Redirect($"/StatusCode?code={ctx.HttpContext.Response.StatusCode}");
                    return Task.CompletedTask;
                }

                return ctx.Next.Invoke(ctx.HttpContext);
            }
});
```


### Modifier la gestion des erreurs

Pour la gestion des erreurs nous utiliserons les même logique, tous les segments commençant par api seront exclu.

**A noter :** que nous utilisons la méthode **UseWhen** qui permet d’utiliser un middleware uniquement dans certains cas.

```csharp

app.UseWhen(ctx => !ctx.Request.Path.StartsWithSegments("/api", StringComparison.OrdinalIgnoreCase), cfg =>
                 cfg.UseExceptionHandler("/Error")
```


Happy coding 🙂

## Pour aller plus loin :
- [Lien vers la documentation officielle ASP.NET Core](https://docs.microsoft.com/fr-fr/aspnet/core/fundamentals/error-handling)
