繁体   English   中英

引发异常时更改HTTP状态代码

[英]Change HTTP status code when exception is thrown

我使用从HandleErrorAttribute派生的自定义类来处理异常,当在我的MVC应用程序中用户请求的内容(他不允许这样做)时,我抛出AuthenticationException,并且我想将HTTP状态代码更改为401。

public class HandleErrorFilterAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        if (typeof(AuthenticationException) == filterContext.Exception.GetType())
        {
            filterContext.HttpContext.Response.StatusCode = 401;
        }
    }
}

但是我的结果是状态代码500,当我调试该代码时,在Application_Error(object,EventArgs)中状态更改为401,但最终MVC覆盖了我的设置。
如何更改响应HTTP状态? 我做错了什么?

filterContext按值传递。 这意味着它将创建作为函数的参数传递的对象的副本,并且您更改了copy的值。

通常,您需要使用ref关键字通过引用传递参数,因此您将拥有与传递的ExceptionContext相同的实例;

在覆盖的情况下,您不能更改函数参数。 因此,您需要重新考虑您的程序架构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM