2010-10-15 61 views
4

我想使用標準的AuthorizeAttribute(即不是繼承它),但使用自定義重定向。那可能嗎?我應該在哪裏檢查401並重定向?AuthorizeAttribute with custom redirect

我試圖添加

<customErrors mode="On" > 
     <error statusCode="401" redirect="/Errors/NotAuthorized/" /> 
</customErrors> 

,但沒有奏效。

回答

7

在我的ApplicationController這樣做:

protected override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     var attributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(AuthorizeAttribute), true); 
     if (attributes.Length == 0) 
      attributes = GetType().GetCustomAttributes(typeof(AuthorizeAttribute), true); 
     if (attributes.Length == 0) 
      return; 

     foreach (AuthorizeAttribute item in attributes) 
     { 
      if (!Thread.CurrentPrincipal.IsInRole(item.Roles)) 
      { 
       filterContext.Result = new RedirectResult("/Errors/Unauthorized"); 
      } 
     } 
    } 

我就獎勵誰的人有一個更好的解決方案。

+0

我試圖做一些類似Global.asax的事情,但似乎我沒有訪問AuthorizationContext那裏... – TDaver 2011-05-09 08:19:13