让UrlAuthorizationModule.CheckUrlAccessForPrincipal检查MVC中的AllowAnonymous属性

时间:2019-07-17 15:50:24

标签: c# authentication model-view-controller controller

在我的网站上,我们使用的是经过修改的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();
        }
    }
}

0 个答案:

没有答案