CORS 不适用于 jQuery

Posted

技术标签:

【中文标题】CORS 不适用于 jQuery【英文标题】:CORS not working with jQuery 【发布时间】:2018-05-29 17:12:22 【问题描述】:

我在 WCF RESTful 服务中有以下代码

public EmployeeJSON GetEmployeeJSON(string id)
    
        List<EmployeeJSON> employees = new List<EmployeeJSON>()
        
             new EmployeeJSON() Name="Sumanth",Id=101,Salary=5000.00 ,
             new EmployeeJSON() Name="Ehsan",Id=102,Salary=6000.00 ,
        ;

        var Employee = (from x in employees
                        where x.Id.ToString() == id
                        select x);


        return Employee.FirstOrDefault() as EmployeeJSON;
    

下面是RESTful Service的声明

[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "GetJson/id", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
EmployeeJSON GetEmployeeJSON(string id);

当我在浏览器中执行以下 URL 时

http://localhost:1249/Service1.svc/GetJson/101

我得到如下结果

"GetEmployeeJSONResult":"Id":101,"Name":"Sumanth","Salary":5000

但是当我从 jQuery 调用时,代码会出错并显示空消息

$(document).ready(function () 
    );

    var GetJson = function () 
        $.ajax(
            type: "GET",
            url: "http://localhost:1249/Service1.svc/GetJson/101",
            contentType: "application/json;charset=utf-8",
            dataType: "json",
            success: function (data) 
                var result = data.GetEmployeeJSONResult;
                var id = result.Id;
                var name = result.Name;
                var salary = result.Salary;
                $('#jsonData').html('');
                $('#jsonData').append('<table border="1"><tr><th>Employee Id</th><th>Name</th><th>Salary</th></tr><tr><td>' + id + '</td><td>' + name + '</td><td>' + salary + '</td></tr></table>');

            ,
            error: function (xhr) 
                alert(xhr.responseText);
            
        );
    

下面是代码,我放在WCF RESTful Service的web.config中

<system.webServer>
<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
  </customHeaders>
 </httpProtocol>
</system.webServer>

我在这里错过了什么?

【问题讨论】:

您是否也可以添加xhr 变量的全部数据(来自您的错误块)? 请查阅规范和数百篇关于此的文章。 Access-Control-Allow-Origin 只是您必须包含的 一个 标头,通常还有其他标头。 打开浏览器开发控制台,看看究竟是什么请求和响应。我的疯狂猜测是响应将是 405 方法不允许。 可能重复? ***.com/questions/40197460/… 【参考方案1】:

通过将下一行代码添加到 Startup 类来配置您的 WEB API 以使用 CORS:

app.UseCors(CorsOptions.AllowAll);
var config = new HttpConfiguration();
var enableCors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(enableCors);

*其中appIAppBuilderconfigHttpConfiguration

【讨论】:

是否可以在web.config文件&lt;system.webServer&gt; &lt;httpProtocol&gt; &lt;customHeaders&gt; &lt;add name="Access-Control-Allow-Origin" value="*" /&gt; &lt;add name="Access-Control-Allow-Headers" value="Content-Type" /&gt; &lt;add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /&gt; &lt;/customHeaders&gt; &lt;/httpProtocol&gt; &lt;/system.webServer&gt;中这样添加。 对我来说,在 web.config 文件中设置上面的注释不起作用。 需要配置WEB API,添加headers属性是不够的。 我根本没有使用 WEB API。我正在使用一个调用该服务的简单 Web 应用程序。此外,当我尝试使用开发人员工具进行调试时,我收到 404 错误为Failed to load http://localhost:1249/Service/Service1.svc/GetJson: Response for preflight has invalid HTTP status code 404。这里在 URL 中添加了额外的Service,同时在 Chrome 的开发工具中抛出错误。

以上是关于CORS 不适用于 jQuery的主要内容,如果未能解决你的问题,请参考以下文章

Web Api 2 CORS 不适用于 POST

CORS 不适用于路由

CORS 不适用于 hapijs 和 socket.io

Spring - CORS 不适用于安全配置

授权标头不适用于 cors [关闭]

xmlHttp.getResponseHeader + 不适用于 CORS