Ajax 调用网络 API

Ajax Call To Web API

我正在使用 jquery 对 asp.net Web API 方法进行 ajax 调用,该方法使用授权令牌对请求进行身份验证。这是 ajax 调用:

$.ajax({
    url: targetUrl,
    type: 'GET',
    beforeSend: function(xhr){
        xhr.setRequestHeader("Authorization", "Basic " + btoa(token + ":" + password));
    },
    success: function (data) {
        // do stuff   
    }
});

此调用为 OPTIONS 方法生成 405 Method Not Allowed。这似乎是 Web 上 CORS 支持的问题 API。

但是,如果从简单的 .NET 控制台应用程序调用 Web API 方法,它会按预期工作:

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
req.Headers[HttpRequestHeader.Authorization] = "Basic " + token + ":" + password;
HttpWebResponse res = (HttpWebResponse)req.GetResponse();

如果从 Fiddler 调用它也有效。

如果 Web API 方法不支持 CORS,为什么这些其他调用有效?我在 jQuery 通话中是否遗漏了什么?

P.S。我无法访问 Web API 代码库。

在此先感谢您的帮助!

why do these other calls work?

因为客户端计算机上的浏览器正在访问的网页中的其他调用不是从 JavaScript 运行 发出的。它们是由明确安装在客户端计算机上的软件制作的。

同源策略可以阻止网站 A 使用用户 B 的浏览器从网站 C 使用用户 B 的凭据请求数据。

CORS 是网站 C 告诉浏览器它可以放宽同源策略的一种方式。

由于同源策略不适用于浏览器之外,因此 CORS 规范要求的预检 OPTIONS 请求甚至不会在您的其他测试中发送。