using Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using Newtonsoft.Json; namespace Azaion.Common; public class BusinessExceptionHandler(ILogger logger) : IExceptionHandler { public async ValueTask TryHandleAsync(HttpContext httpContext, Exception exception, CancellationToken cancellationToken) { if (exception is not BusinessException ex) return false; logger.LogWarning(exception, ex.Message); httpContext.Response.StatusCode = StatusCodes.Status409Conflict; httpContext.Response.ContentType = "application/json"; var err = JsonConvert.SerializeObject(new { ErrorCode = ex.ExceptionEnum, ex.Message }); await httpContext.Response.WriteAsync(err, cancellationToken).ConfigureAwait(false); return true; } }