Фильтр исключений ASP.NET Core 1.0 не может вернуть его 404
Я пытался заставить фильтр исключений работать, просто возвращая 404. К сожалению, он, похоже, вообще не возвращает 404, вместо этого он выбрасывает 500.
Контроллер API:
[HttpGet("{id}")]
[ItemNotFoundExceptionFilter]
public async Task<IActionResult> Get(int id)
{
var _service = new CustomExeptionService();
_service.ThrowItemNotFoundException();
return Ok();
}
Таможенное обслуживание исключений:
public class CustomExeptionService
{
public void ThrowItemNotFoundException()
{
throw new ItemNotFoundException("This is a custom Exception.");
}
}
public class ItemNotFoundException : Exception
{
public ItemNotFoundException(string message) : base(message) { }
public ItemNotFoundException(string message, Exception ex) : base(message, ex) { }
}
Атрибут фильтра исключений:
public class ItemNotFoundExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext context)
{
HandleCustomException(context);
base.OnException(context);
}
private void HandleCustomException(ExceptionContext context)
{
if (context.Exception.GetType() == typeof(ItemNotFoundException))
{
context.HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound;
}
}
}
2 ответа
У меня была такая же проблема сегодня. Я думаю, что ваш код будет работать, если вы очистите исключение. Пример:
public override void OnException(ExceptionContext context)
{
if (context.Exception.GetType() == typeof(TokenExpiredException))
{
context.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
context.Exception = null;
}
base.OnException(context);
}
Приходите, чтобы узнать, что HttpResponseException не существует для MVC 6.
Ответ Дэвида Фаулерса: https://twitter.com/YuvalItzchakov/status/614094855367581696
Необработанные исключения вытекают из конвейера. Вы должны написать свое собственное промежуточное программное обеспечение, чтобы делать то, что вы хотите с ними.