Javascript 如何允许ASP.NET的CORS

Javascript 如何允许ASP.NET的CORS,javascript,asp.net,ajax,cors,Javascript,Asp.net,Ajax,Cors,我在尝试从JS/Ajax向我的WebAPI发出请求时遇到问题。在我的解决方案中,我有一个发布在srv02:2400上的Web API和一个发布在srv02:2300上的网站 当我导航到页面时,页面加载良好,除了应该来自API的数据 我得到了一个错误: XMLHttpRequest cannot load http://srv02:2400/api/requests/find/1. Response to preflight request doesn't pass access control

我在尝试从JS/Ajax向我的WebAPI发出请求时遇到问题。在我的解决方案中,我有一个发布在srv02:2400上的Web API和一个发布在srv02:2300上的网站

当我导航到页面时,页面加载良好,除了应该来自API的数据

我得到了一个错误:

XMLHttpRequest cannot load http://srv02:2400/api/requests/find/1. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://srv02:2300' is therefore not allowed access. The response had HTTP status code 400.
但是,如果我获取url并将其粘贴到浏览器中,就会得到正确的JSON列表

我试图通过以下方式,按照API中的建议,在全球范围内启用CORS:

  • 安装包Microsoft.AspNet.WebApi.Cors
  • 通过添加以下内容更新我的WebApiConfig.cs:

    var cors = new EnableCorsAttribute("http://srv02:2300", "*", "*");
    config.EnableCors(cors);
    
    var cors=新的EnableCorsAttribute(“,”,“,”); 配置使能cors(cors)

  • 然而,这并没有起作用

    正如我前面提到的,我正在按照Ajax的要求执行我的请求

    $.ajax({
            url: "http://srv02:2400/api/requests/find/" + id,
            type: "GET",
            dataType: 'json',
            contentType: 'application/json',
            success: function (requests) {
                 console.log('success');
            },
            error: function (err) {
                if (err) {
                    console.log(err);
                }
            }
        });
    
    我尝试按照建议将json更改为jsonp,但没有成功

    你知道怎么解决这个问题吗


    谢谢大家!

    您的全局属性看起来不正确

    我想你想改变两件事

    • 您的CORS url应该是您希望允许的应用程序的url(而不是API url),即
      :2300
      而不是
      :2400
    • 您没有选择有效的标题和方法(动词)。您或者需要在这里使用特定的值,或者*(如果您在全局应用此值,这可能更有意义)
    你想要的是:

    var cors = new EnableCorsAttribute("http://srv02:2300", "*", "*");
    config.EnableCors(cors);
    

    这应该指示浏览器(使用选项响应)如果他们想从
    http://srv02:2300/*
    对于任何动词或标题,都可以。如果另一个域尝试调用此API,它将不正常。

    您的全局属性看起来有误

    我想你想改变两件事

    • 您的CORS url应该是您希望允许的应用程序的url(而不是API url),即
      :2300
      而不是
      :2400
    • 您没有选择有效的标题和方法(动词)。您或者需要在这里使用特定的值,或者*(如果您在全局应用此值,这可能更有意义)
    你想要的是:

    var cors = new EnableCorsAttribute("http://srv02:2300", "*", "*");
    config.EnableCors(cors);
    
    这应该指示浏览器(使用选项响应)如果他们想从
    http://srv02:2300/*
    对于任何动词或标题,都可以。如果另一个域尝试调用此API,它将不正常