В проекте Asp.net Core у меня есть контроллеры как веб-интерфейса, так и веб-API. Я подписался на https://www.devtrends.co.uk/blog/handling-errors-in-asp.net-core-web-api и включен в startup.cs:
app.UseStatusCodePagesWithReExecute("/Error/error/{0}");
app.UseExceptionHandler("/Error/error/500");
И добавлено действие по обработке ошибок в ErrorController:
[Route("error/{code}")]
public IActionResult Error(int code)
{
return new ObjectResult(new ApiResponse(code));
}
Это хорошо для веб-API, но не для веб-страниц. Для api мы хотим вернуть настраиваемый объект (сериализованный как JSON), но для пользовательского интерфейса мы хотим вернуть настраиваемое представление. Я хочу написать что-то вроде
public IActionResult Error(int code)
{
if(CalledFromApiClient())
{
return new ObjectResult(new ApiResponse(code));
}
else
return View(“Error”);
}
Вопрос в том, как реализовать CalledFromApiClient?
Я думаю сохранить все контроллеры api в подпапке / пространстве имен api и использовать стек вызовов, чтобы найти, было ли исключение, выброшенное из контроллера api, или нет. Должно сработать, но выглядит неважно.
Есть способ лучше?