【问题标题】:Custom Authorize attribute not working on expired ajax requests自定义授权属性不适用于过期的 ajax 请求
【发布时间】:2018-07-21 15:23:52
【问题描述】:

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

谢谢。

更新: 我明白了原因:我在 web.config 中对授权部分进行了如下评论:

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

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

【问题讨论】:

  • 我花了三个小时绞尽脑汁研究这个。甚至没有考虑注释掉代码。非常适合 MVC 5。

标签: jquery asp.net-mvc ajax forms-authentication


【解决方案1】:

不要在未经授权的情况下返回 401。 ASP.NET 拦截并重定向到 web.config 中定义的登录页面。对于 AJAX,请改为返回其他内容,例如 403。

【讨论】:

  • 无论出于何种原因,AuthorizeCore(被覆盖)甚至都没有被调用......我试图找出什么可以阻止它。
  • +1 糟糕的是,asp.net 会接收 401 并自动重定向。这是一个很好的答案!
【解决方案2】:
【解决方案3】:

使用context.HttpContext.Request.IsAjaxRequest() 检测请求是否为Ajax 请求。 在这里查看更多:

Authorize attribute and jquery AJAX in asp.net MVC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    相关资源
    最近更新 更多