代码之家  ›  专栏  ›  技术社区  ›  Dan Davies Brackett

如何隐藏在无效会话上调用[WebMethod]时出现的用户名/密码提示?

  •  1
  • Dan Davies Brackett  · 技术社区  · 15 年前

    我有一个 .aspx 使用一个用[WebMethod]属性修饰的静态方法和页面上的脚本管理器,以便可以使用 PageMethods.MethodName() . 已启用窗体身份验证。

    除了在过期会话上调用webmethod之外,这在所有场景中都能很好地工作。当发生这种情况时,服务返回HTTP401并弹出用户名/密码对话框!我更愿意将用户重定向,因为它们与任何其他请求(包括异步回发)一起重定向。在这种情况下,有没有一种方法可以捕获特定的条件,或者配置应用程序来做正确的事情?

    编辑以更正实际的HTTP状态代码-它是HTTP 401,而不是403

    2 回复  |  直到 15 年前
        1
  •  1
  •   Tadas Å ukys    15 年前

    我们没有同样的问题。我们通过在IIS上禁用Windows身份验证来解决这个问题。这很奇怪,因为我们的应用程序也被配置为使用FormsAuthentication。

        2
  •  0
  •   Keltex    15 年前

    可以为应用程序设置一个WebService,在调用WebMethod之前检查isUserAuthenticated()。如果返回false,那么可以在javascript中重定向到登录页面,并避免出现错误。确保此Web服务不需要身份验证。

    问题是,authenticateRequest事件在页面获得控制权之前得到处理。这意味着代码隐藏中没有任何可以解决这个问题的功能。因为是FormsAuthenticationModule拒绝请求并返回HTTP 403。