【问题标题】:Ajax Call To Web APIAjax 调用 Web API
【发布时间】:2015-03-12 19:29:55
【问题描述】:

我正在使用 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   
    }
});

此调用将导致 405 Method Not Allowed 用于 OPTIONS 方法。这似乎是 Web API 上的 CORS 支持的问题。

但是,如果从简单的 .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 调用中遗漏了什么吗?

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

提前感谢您的帮助!

【问题讨论】:

    标签: javascript jquery asp.net ajax asp.net-web-api


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-07-14
      • 2013-11-12
      • 1970-01-01
      • 2015-08-24
      • 2020-07-07
      • 2014-05-01
      • 2013-08-29
      • 1970-01-01
      • 2015-10-08
      相关资源
      最近更新 更多