抛出异常时更改HTTP状态代码

时间:2015-02-17 18:24:03

标签: c# .net http exception model-view-controller

我使用派生自HandleErrorAttribute的自定义类来处理exeptions在我的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状态?我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

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

如果覆盖,则无法更改函数参数。所以你需要重新考虑你的程序架构。