private static async Task WriteResponse(HttpContext context) { _context = context; var exceptionDetails = context.Features.Get <IExceptionHandlerFeature>(); var ex = exceptionDetails?.Error; if (ex != null) { context.Response.ContentType = "application/problem+json"; _problemDetailsFactory = context?.RequestServices?.GetRequiredService <ProblemDetailsFactory>(); ProblemDetails problemDetails = ex switch { CustomExceptionBase customException => HandleProblemDetails(customException), ValidationExceptionBase validationException => HandleValidationProblemDetails(validationException), _ => HandleDefault(ex), }; var stream = _context.Response.Body; if (problemDetails is ValidationProblemDetails validationProblemDetails) { await JsonSerializer.SerializeAsync(stream, validationProblemDetails); } else { await JsonSerializer.SerializeAsync(stream, problemDetails); } } }
private static ProblemDetails HandleProblemDetails(CustomExceptionBase ex) { _context.Response.StatusCode = (int)ex.StatusCode; var problemDetails = _problemDetailsFactory.CreateProblemDetails( _context, statusCode: (int)ex.StatusCode, detail: _includeStackTrace ? ex.ToString() : ex.Message ); return(problemDetails); }