为什么这个CORS请求失败?

时间:2014-09-28 20:28:53

标签: javascript c# jquery api cors

我尝试使用以下代码从web api获取值,目前是硬编码的。 但它会导致“错误”。部分100%的时间,我不知道为什么。 欢迎任何帮助。

    function SignIn() {
        $.ajax({
            type: 'GET',
            url: 'http://localhost:1200/Api/Values/3',
            dataType: "jsonp",
            crossDomain: true,
            xhrFields: {
                'withCredentials': true
            },
            headers: {
                'Access-Control-Allow-Origin': '*'
            },
            success: function (data) {
                debugger;
                alert(data);
            },
            error: function (xhr, ajaxOptions) {
                debugger;
                alert(xhr.status);
                alert(ajaxOptions);
            }
        });
    }

服务器端:

[EnableCors("Access-Control-Allow-Origin", "*", "*")]
public string Get(int id)
{
   return "{Name: 'Foo', Id: '1234',Rank: 7}";
}

Web.Config(服务器):

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

1 个答案:

答案 0 :(得分:0)

使用jsonp,您必须定义回调函数。小心,JSON想要键和值的双引号:

[EnableCors("Access-Control-Allow-Origin", "*", "*")]
public string Get(int id)
{
   return "callback({\"Name\": \"Foo\", \"Id\": \"1234\",\"Rank\": 7})";
}

现在是Ajax:

function SignIn() {
    $.ajax({
        type: 'GET',
        url: 'http://localhost:1200/Api/Values/3',
        dataType: "jsonp",
        jsonpCallback: "callback",
        xhrFields: {
            'withCredentials': true
        },
        success: function (data) {
            debugger;
            alert(data);
        },
        error: function (xhr, ajaxOptions) {
            debugger;
            alert(xhr.status);
            alert(ajaxOptions);
        }
    });
}

或者,您只需将jsonp更改为json dataType即可试用您的​​代码。