C# ASP.NET Core 1.0异常过滤器可以';我不能让它返回404
我一直试图通过简单地返回404来让异常过滤器工作。不幸的是,它似乎根本没有返回404,而是抛出500 API控制器:C# ASP.NET Core 1.0异常过滤器可以';我不能让它返回404,c#,exception-handling,custom-attributes,asp.net-core-1.0,C#,Exception Handling,Custom Attributes,Asp.net Core 1.0,我一直试图通过简单地返回404来让异常过滤器工作。不幸的是,它似乎根本没有返回404,而是抛出500 API控制器: [HttpGet("{id}")] [ItemNotFoundExceptionFilter] public async Task<IActionResult> Get(int id) { var _service = new CustomExeptionService(); _service.ThrowItemNotFoundException();
[HttpGet("{id}")]
[ItemNotFoundExceptionFilter]
public async Task<IActionResult> Get(int id)
{
var _service = new CustomExeptionService();
_service.ThrowItemNotFoundException();
return Ok();
}
异常筛选器属性:
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;
}
}
}
来看看MVC 6不存在HttpResponseException David Fowlers回应:
未处理的异常从管道中流出。您必须编写自己的中间件来处理它们。我今天也遇到了同样的问题。如果你清除了异常,我认为你的代码会工作的。例如:
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);
}
如果在
OnException
方法中放置断点,是否调用过它?是的,确实调用过OnException。事实上,HandleCustomException也会被调用,它确实会进入ifcontext.HttpContext.Response.StatusCode
也被正确设置为404,但在我通过web的响应中,我仍然看到500而不是404。
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);
}