抛出自定义异常进行过滤
Throw custome exception to filter
我需要从过滤器发送一些状态代码,但我不知道如何传递适当的上下文异常。我看到了 HttpActionExecutedContext,但不知道它在哪里,在什么命名空间中...顺便说一句,它的 .net core 5,web api
public class AuthFilter : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext context)
{
if (context.Exception is CustomerDataException)
{
}
else if (context.Exception is CustomerNotFoundException)
{
}
else if (context.Exception is CustomerExistsException)
{
}
}
}
HttpActionExecutedContext
默认用作 asp.net web api 中 ActionFilterAttribute
的参数。
对于您的场景,您似乎想从 ExceptionFilter 发送状态码,您可以这样做:
public class AuthFilter : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext context)
{
var statusCode = HttpStatusCode.InternalServerError;
if (context.Exception is CustomerDataException)
{
statusCode = HttpStatusCode.BadRequest;
}
else if (context.Exception is CustomerNotFoundException)
{
statusCode = HttpStatusCode.NotFound;
}
context.HttpContext.Response.ContentType = "application/json";
context.HttpContext.Response.StatusCode = (int)statusCode;
context.Result = new JsonResult(new
{
error = new[] { context.Exception.Message },
statusCode = statusCode,
stackTrace = context.Exception.StackTrace
});
}
}
我需要从过滤器发送一些状态代码,但我不知道如何传递适当的上下文异常。我看到了 HttpActionExecutedContext,但不知道它在哪里,在什么命名空间中...顺便说一句,它的 .net core 5,web api
public class AuthFilter : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext context)
{
if (context.Exception is CustomerDataException)
{
}
else if (context.Exception is CustomerNotFoundException)
{
}
else if (context.Exception is CustomerExistsException)
{
}
}
}
HttpActionExecutedContext
默认用作 asp.net web api 中 ActionFilterAttribute
的参数。
对于您的场景,您似乎想从 ExceptionFilter 发送状态码,您可以这样做:
public class AuthFilter : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext context)
{
var statusCode = HttpStatusCode.InternalServerError;
if (context.Exception is CustomerDataException)
{
statusCode = HttpStatusCode.BadRequest;
}
else if (context.Exception is CustomerNotFoundException)
{
statusCode = HttpStatusCode.NotFound;
}
context.HttpContext.Response.ContentType = "application/json";
context.HttpContext.Response.StatusCode = (int)statusCode;
context.Result = new JsonResult(new
{
error = new[] { context.Exception.Message },
statusCode = statusCode,
stackTrace = context.Exception.StackTrace
});
}
}