如何从自定义授权属性返回401代码?

时间:2017-08-25 12:56:12

标签: c# asp.net-mvc

我有自定义授权属性。

当在WebAPI中实现这一点时,OnActionExecuting方法会传递一个HttpActionContext对象,我可以在其中更新响应,例如

actionContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);

但是,当在MVC中实现时,传递的对象是一个ActionExecutingContext对象,它包含一个响应,但它是只读的,这意味着我不能以同样的方式返回授权拒绝。

这不会起作用,因为它只读:

context.HttpContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);

由于它只读,因此也不会起作用:

HttpContext.Current.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);

如何在MVC中获得可以这样设置的可写响应?

2 个答案:

答案 0 :(得分:1)

尝试设置结果,而不是响应;

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    // Authorization code here - if not authorized:

    filterContext.Result = new HttpStatusCodeResult(HttpStatusCode.Unauthorized);
}

答案 1 :(得分:0)

这应该做:HttpException:https://msdn.microsoft.com/en-us/library/system.web.httpexception(v=vs.110).aspx

throw New HttpException(401, "your message");