У меня есть несколько контроллеров .Net, которые выглядят следующим образом:
Код: Выделить всё
[HttpGet("{id}")]
public async Task GetById(Int32 id)
{
id = FormatId(id);
return lookupId(id);
}
Предположим, у меня есть десятки таких конечных точек на нескольких контроллерах, и некоторые из них требуют, чтобы идентификатор был отформатирован определенным образом, например целое число, дополненное до 5 цифр, поэтому FormatId дополняет его для меня и если оно превышает 5 цифр, выдается исключение BadHttpRequestException.
Теперь вместо того, чтобы засорять все конечные точки, связанные с идентификатором, с помощью:
Можно ли в любом случае прикрепить общий обработчик исключений к любым/всем конечным точкам/контроллерам?
По сути, я просто хочу сделать что-то вроде:< /p>
Код: Выделить всё
Controller.OnException(Exception e)
{
if (e.Type == BadHttpRequestException) // Ignore invalid C# syntax, just pseudocode
{
return BadRequest(e.Message);
}
}
Я предполагаю, что это поддерживаемый способ, или могу ли я иметь доступ к уровню над конечной точкой контроллера, чтобы я мог сам его перехватить и сделать что-то вроде:
Код: Выделить всё
public MyWrapperEndpoint(T endpoint)
{
try {
endpoint(); // call whatever endpoint was requested (GetById)
} catch (BadHttpRequestException e) {
return BadRequest(e.Message); // Return the common exception message
}
}
По сути, мой вопрос сводится к тому, что если мои нижние уровни выдают исключение BadHttpRequestException (или любое другое исключение, которое, как я знаю, я выбрасываю явно), как я могу легко заставить перехватывать все конечные точки моего контроллера это исключение и вернуть объект BadRequest?
Подробнее здесь:
https://stackoverflow.com/questions/784 ... n-handling