自定义授权属性不适用于过期的 ajax 请求

发布于 2024-08-09 06:02:21 字数 502 浏览 4 评论 0原文

我的控制器上有一个自定义授权属性,并且不会在过期的 ajax 请求上调用它。 我正在使用表单身份验证,并通过 $.ajax (jQuery) 调用控制器方法。 ajax 请求返回我的登录页面,但我似乎无法拦截此页面。

谢谢。

更新: 我明白了原因:我在 web.config 中评论了授权部分,如下所示:

  <authentication mode="Forms">
      <forms loginUrl="/Login" timeout="1" slidingExpiration="false"/>
    </authentication>
    <!--<authorization>
      <deny users="?"/>
    </authorization>-->

现在,即使在过期后,我的授权过滤器也会被调用。事实证明,Web.config 授权规则优先于授权过滤器。

I have a custom authorize attribute on my controllers and it is not being called on expired ajax requests.
I'm using forms authentication, and call controller methods via $.ajax (jQuery). The ajax request returns my login page and I don't seem to be able to intercept this.

Thank you.

UPDATE:
I figured out why: I commented the authorization section in my web.config like follows:

  <authentication mode="Forms">
      <forms loginUrl="/Login" timeout="1" slidingExpiration="false"/>
    </authentication>
    <!--<authorization>
      <deny users="?"/>
    </authorization>-->

Now my authorization filter is being called even after expiration. Turns out that Web.config authorization rules take precedence over Authorize filters.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

只有影子陪我不离不弃 2024-08-16 06:02:21

未经授权请勿返回 401。 ASP.NET 拦截该请求并重定向到 web.config 中定义的登录页面。对于 AJAX,请返回其他内容,例如 403。

Don't return 401 unauthorized. ASP.NET intercepts that and redirects to the login page defined in web.config. For AJAX, instead return something else, like 403.

凉风有信 2024-08-16 06:02:21

使用context.HttpContext.Request.IsAjaxRequest()来检测请求是否是Ajax请求。
在此处查看更多信息:

在 asp.net MVC 中授权属性和 jquery AJAX

Use context.HttpContext.Request.IsAjaxRequest() to detect if request is an Ajax request or not.
Check more here:

Authorize attribute and jquery AJAX in asp.net MVC

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文