0

Account、 、Admin、 の4 つのコントローラーがHomeありGalleryます。この 4 つのコントローラーのうち、コントローラーを承認する必要があるだけでAdmin、残りは匿名でアクセスできます。したがって、ホームコントローラー、ギャラリーコントローラー、およびアカウントコントローラーを[AllowAnonymous]属性でAdmin装飾し、コントローラーを名前付きのカスタム承認フィルターで装飾し、[CustAuthFilter]次のコードが含まれています。

public class CustAuthFilter : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
      var request = httpContext.Request;
      string controller = request.RequestContext.RouteData.Values["controller"].ToString().ToLower();
      if (controller != "" && controller == "admin")
      {
          var isAuthorized = base.AuthorizeCore(httpContext);
          if (!isAuthorized)
          {
                return false;
          }
          else
          {
                if (!object.ReferenceEquals(httpContext.Session["un"], null))
                {
                      return true;
                }
                else
                {
                      return false;
                }
           }
       }
       else
       {
          return true;
       }
     }

     override public void OnAuthorization(AuthorizationContext filterContext)
     {
           base.OnAuthorization(filterContext);
           if (filterContext.Result is HttpUnauthorizedResult && filterContext.HttpContext.Request.IsAjaxRequest())
           {
               String url = System.Web.Security.FormsAuthentication.LoginUrl + "?X-Requested-With=XMLHttpRequest";
                filterContext.Result = new RedirectResult(url);
           }
     }

     protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
     {
        String url = System.Web.Security.FormsAuthentication.LoginUrl;
        filterContext.Result = new RedirectResult(url);
     }
}

そして私のweb.configで私は従った

<authentication mode="Forms">
      <forms loginUrl="~/Account/Login" defaultUrl="~/Admin/Index" timeout="2880" protection="Encryption" slidingExpiration="true" cookieless="AutoDetect"/>
</authentication>
<authorization>
   <deny users="?"/>
</authorization>

次のように、カスタマイズした承認属性をフィルターに登録しました。

filters.Add(new CustAuthFilter());

しかし、アクセスしようとすると、domainname/homeまたはdomainname/galleryに自動的にリダイレクトされdomainname/account/loginます。しかし、ホームコントローラーとギャラリーコントローラーを装飾した後でも、アカウントコントローラーにリダイレクトされる理由がわかりません[AllowAnonymous]!!

4

1 に答える 1

1

認証構成が原因で動作が発生しています。

<authorization>
    <deny users="?"/>
</authorization>

この行を構成から削除すると、その後は機能するはずです。

Web.config の承認と MVC で使用可能な Authorize 属性を混在させようとしています。web.config で認証タグ Authorize 属性と認証ノードを使用しないことに対する明確な回答については、このリンクをお読みください。

于 2015-03-28T20:19:15.857 に答える