我使用派生自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状态?我做错了什么?
答案 0 :(得分:1)
filterContext按值传递。这意味着它创建了作为函数参数传递的对象副本,并且您更改了副本的值。
通常,您需要使用ref keyword通过引用传递参数,因此您将拥有与传递的ExceptionContext相同的实例;
如果覆盖,则无法更改函数参数。所以你需要重新考虑你的程序架构。