抛出自定义异常进行过滤

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
        });
    }
}