Ajax Call To Web API

Ajax Call To Web API

本文关键字:API Web To Call Ajax      更新时间:2023-09-26

我正在使用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 API 上的 CORS 支持的一个问题。

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

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

如果从小提琴手调用,它也可以工作。

如果 Web API 方法不支持 CORS,为什么这些其他调用有效?我的jQuery调用中是否缺少某些内容?

附言我无权访问 Web API 代码库。

提前感谢您的帮助!

为什么这些其他调用有效?

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

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

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

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