.Net Общая обработка исключенийC#

Место общения программистов C#
Ответить
Anonymous
 .Net Общая обработка исключений

Сообщение Anonymous »

У меня есть несколько контроллеров .Net, которые выглядят следующим образом:

Код: Выделить всё

[HttpGet("{id}")]
public async Task GetById(Int32 id)
{
id = FormatId(id);
return lookupId(id);
}
Предположим, у меня есть десятки таких конечных точек на нескольких контроллерах, и некоторые из них требуют, чтобы идентификатор был отформатирован определенным образом, например целое число, дополненное до 5 цифр, поэтому FormatId дополняет его для меня и если оно превышает 5 цифр, выдается исключение BadHttpRequestException.
Теперь вместо того, чтобы засорять все конечные точки, связанные с идентификатором, с помощью:

Код: Выделить всё

try/catch { return BadRequest() }
Можно ли в любом случае прикрепить общий обработчик исключений к любым/всем конечным точкам/контроллерам?
По сути, я просто хочу сделать что-то вроде:< /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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»