42 lines
1.3 KiB
C#
42 lines
1.3 KiB
C#
namespace Webzine.WebApplication.Filters;
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.Mvc.Filters;
|
|
|
|
/// <summary>
|
|
/// Filtre d'exception global qui intercepte toute exception non gérée et la journalise automatiquement.
|
|
/// </summary>
|
|
public class GlobalExceptionFilter : IExceptionFilter
|
|
{
|
|
private readonly ILogger<GlobalExceptionFilter> logger;
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="GlobalExceptionFilter"/> class.
|
|
/// </summary>
|
|
/// <param name="logger">Service de journalisation injecté.</param>
|
|
public GlobalExceptionFilter(ILogger<GlobalExceptionFilter> logger)
|
|
{
|
|
this.logger = logger;
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
public void OnException(ExceptionContext context)
|
|
{
|
|
this.logger.LogError(
|
|
context.Exception,
|
|
"Erreur non gérée dans {Action} : {Message}",
|
|
context.ActionDescriptor.DisplayName,
|
|
context.Exception.Message);
|
|
|
|
context.Result = new ObjectResult(new
|
|
{
|
|
erreur = "Une erreur inattendue est survenue.",
|
|
detail = context.Exception.Message,
|
|
})
|
|
{
|
|
StatusCode = StatusCodes.Status500InternalServerError,
|
|
};
|
|
|
|
context.ExceptionHandled = true;
|
|
}
|
|
} |