我有自定义授权属性。
当在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中获得可以这样设置的可写响应?
答案 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");