#api #asp.net-core
Вопрос:
У меня есть приложение WebAPI. Каждый ответ основан на этой модели
public class CustomHttpResponse
{
public int status { get; set; }
public string message { get; set; }
public object data { get; set; }
}
Пример ответа для автоматической настройки, выглядит следующим образом
{
"status": 200,
"message": "Logged succesfull",
"data": {
"firstName": "Test",
"lastName": "User",
"username": "test",
"token": "AUTH_TOKEN"
}
}
Теперь я хочу перехватить каждое исключение, которое было выдано в любом контроллере, и отправить ответ пользователю, например
{
"status": 500,
"message": "Internal Server Error",
"data": null
}
Я пытался использовать промежуточное программное обеспечение, но Invoke
метод возвращает тип Task
, и я не знаю, как с этим работать. Другим способом было переопределить OnActionExecuting
from Controller
, но есть void
возвращаемый тип, и я не знаю, что с этим делать.
Комментарии:
1. Вы могли бы определить глобальный класс обработчика исключений, который позволит вам определять пользовательские ответы на основе типа исключения. Возможно, эта ссылка будет вам полезна stackify.com/csharp-catch-all-exceptions
2. Спасибо. Решение с ошибкой, связанной с пользовательским маршрутом в контроллере, является замечательным. Я могу отправить статус 500 при исключении, но при моем собственном типе исключения я могу отправить сообщение об ошибке пользователю. <3
Ответ №1:
Если это для asp.net затем core использует метод configure. Главное здесь — увидеть UseExceptionHandler.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseExceptionHandler(configure =>
{
configure.Run(async context =>
{
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
await context.Response.WriteAsJsonAsync(new
{
Message = "Internal Server Error",
Data = default(string),
});
});
});