ajax 调用在 Web 应用程序项目中引发意外登录对话框

ajax call raises unexpected login dialog in a web application project

我在将网站项目转换为 Web 应用程序项目后遇到 Windows 身份验证问题。我开始使用 WinForms 和 Windows 身份验证创建一个新的 Web 应用程序项目。然后,除了删除不需要的默认内容和复制我自己的内容外,我注意到登录对话框出现在我没想到的地方

为了暂时解决这个问题,我只是通过更改禁用了身份验证:

<authentication mode="Windows"/>

至:

<authentication mode="None"/>

在 web.config。相似:<allow users="?"\><allow users="*"/> 我现在可以访问所有 aspx 页面,但仍然在从 aspx 页面调用 ajax 时获取登录对话框。

使用 Fiddler 我发现 ajax 调用看起来没问题:

    POST http://localhost:60578/...bla_bla.aspx/GetSampleDescription HTTP/1.1
    Accept: application/json, text/javascript, */*; q=0.01
    Content-Type: application/json; charset=utf-8
    X-Requested-With: XMLHttpRequest
    Referer: http://localhost:60578/...bla_bla
    Accept-Language: nl-NL
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
    Host: localhost:60578
    Content-Length: 15
    DNT: 1
    Connection: Keep-Alive
    Pragma: no-cache
    Cookie: ASP.NET_SessionId=vieai......yy1txo

    {"Barcode":"4"}

但是,响应是 401 Unauthorized。

然后,IE 浏览器使用额外的授权重复请求 header,失败,等等

问题是:为什么上面的 ajax 调用得到 401 Unauthorized 响应,而 aspx 页面得到 200 OK? web.config 中的什么设置可以解决这个问题?还有其他因素在起作用吗?

aspx 的方法通常不会作为端点暴露给外界。您应该将 GetSampleDescription 方法移动到 asmx 或类似的东西。