当前位置:  开发笔记 > 前端 > 正文

有没有办法在使用XmlHttpRequest时抑制浏览器在401响应上的登录提示

如何解决《有没有办法在使用XmlHttpRequest时抑制浏览器在401响应上的登录提示》经验,为你挑选了1个好方法。

我正在使用jQuert .ajax函数来调用页面方法.该网站正在使用FormsAuthentication.因此,当身份验证票证到期时,对页面方法的调用显然会导致重定向到登录页面.

现在,编写System.Web.Handlers.ScriptModule的天才决定,如果出于某种原因对页面方法或Web服务方法进行REST样式调用,从JavaScript导致302重定向,他们只是简单地转向回应401未经授权.这导致浏览器弹出一个完全误导的登录UI,因为用户试图输入他们的用户名和密码,这意味着什么,因为使用了FormsAuthentication.最后,当用户单击"取消"时,401将进入错误处理程序.

那么,问题是,如何以任何方式禁用浏览器的登录UI提示?网上有些人建议在XHR请求中使用用户名和密码,但它似乎不起作用.



1> Strelok..:

我想我是在解决它.当然依赖于内部MS AJAX相关的错误并不是很好,但这对于遇到这个问题的其他人来说也是有用的.

基本上你做的是,你将X-MicrosoftAjax标头设置为值Delta = true(这里的情况很重要),ScriptModule会将此解释为正常重定向,并将响应转换为200,但会设置pageRedirect数据要使用的页面上任何ScriptManager(MS-AJAX PageRequestManager)的字符串.jQuery.ajax函数仍会将此视为错误,因此基本上您可以在XHR的responseText属性中检查pageRedirect并相应地对其进行处理.就像将用户发送到某个东西的登录页面一样.

    $.ajax({
            type: "POST",
            url: postUrl + "/SomePageMethod",
            data: "{searchString:\"" + escape(searchString) + "\"}",
            contentType: "application/json; charset=utf-8",
            beforeSend: function(xhr) {
                xhr.setRequestHeader("X-MicrosoftAjax","Delta=true");
            },
            dataType: "json",
            success: onSuccess,
            error: onError
        });

function onError(xhr, e, textStatus) {
    var isAjaxRedirect = xhr.status == 200 && xhr.responseText.match(/pageRedirect/);
    if (isAjaxRedirect == "pageRedirect") {
        // forms authentication ticket expired
        location.href = "a session timeout page, or a login page or whatever";
    }
}

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有