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]
!!