在我的网站上,我们使用的是经过修改的MVC控制器,当用户未登录时,该控制器实现了重定向到登录页面的功能。但是,某些API方法应该适用于所有人。因此,我添加了一张支票:
_isAnonymousAccessAllowed = new Lazy<bool>(() => UrlAuthorizationModule.CheckUrlAccessForPrincipal(Request.Path, new GenericPrincipal(new GenericIdentity(""), new string[0]), Request.RequestType));
这对web.config文件中进行的所有设置都很好。
<location path="signalr">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
但是,似乎该方法忽略了我方法的AllowAnonymous属性。这是真的,还是我做错了什么?
[HttpPost, ActionName("Search"), AllowAnonymous]
public Newtonsoft.JsonResult SearchValue(string s) {
// ....
}
当我通过ajax调用此方法时,服务器仍然尝试将我重定向到登录页面。
protected override void Initialize(RequestContext requestContext) {
base.Initialize(requestContext);
if (Session["User"] == null && !IsAnonymousAccessAllowed) {
FormsAuthentication.SignOut();
if (FormsAuthentication.LoginUrl != requestContext.HttpContext.Request.Url.AbsolutePath) {
FormsAuthentication.RedirectToLoginPage();
}
}
}