Да. Лучшая практика - написать Middleware. Например:
public class ErrorWrappingMiddleware
{
private readonly RequestDelegate next;
public ErrorWrappingMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task Invoke(HttpContext context)
{
try
{
await next.Invoke(context);
}
catch (Exception exception)
{
context.Response.StatusCode = 500;
await context.Response.WriteAsync(...); // change you response body if needed
}
}
}
и добавьте их в свой конвейер
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
{
...
app.UseMiddleware<ErrorWrappingMiddleware>();
...
}
И, конечно, вы можете изменить свою логику в своем промежуточном программном обеспечении по своему усмотрению, включая изменение кода ответа по своему усмотрению. Кроме того, вы можете выбросить свой собственный тип исключения, например MyOwnException
, затем перехватить его в промежуточном программном обеспечении и вызвать собственную логику, связанную с вашим исключением.