自定义授权属性不适用于过期的 ajax 请求
我的控制器上有一个自定义授权属性,并且不会在过期的 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
未经授权请勿返回 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.
这里还有一个很好的博客:
https://www.trycatchfail.com/2011/01/17/handling-authorization-failures-for-ajax-requests-in-asp-net-mvc-applications/
There is also a good blog on this over here:
https://www.trycatchfail.com/2011/01/17/handling-authorization-failures-for-ajax-requests-in-asp-net-mvc-applications/
使用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