【问题标题】:how to allow CORS for ASP.NET如何允许 ASP.NET 的 CORS
【发布时间】:2017-03-22 16:18:10
【问题描述】:

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

当我导航到页面 http://srv02:2300/all-requests.aspx 时,页面加载正常,除了应该来自我的 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 http://srv02:2400/api/requests/find/1 粘贴到浏览器中,它会为我提供正确的 JSON 列表!。

我尝试全局启用 CORS,因为它在我的 API 中推荐 here

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

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

但是,这不起作用。

正如我之前提到的,我正在以 Ajax reqeusts 的身份执行我的请求

$.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,因为这是推荐的 here,但它不起作用。

关于如何在这里解决问题的任何想法。

谢谢!

【问题讨论】:

    标签: javascript asp.net ajax cors


    【解决方案1】:

    您的全局属性看起来不对。

    我认为你想要改变两件事。

    • 您的 CORS url 应该是您想要允许的应用程序的 URL(不是您的 api url),即 :2300 不是 :2400
    • 您没有选择有效的标题和方法(动词)。您需要在此处使用特定值,或者 *(如果您在全局范围内应用它可能更有意义)。

    例如,您想要以下内容:

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

    这应该指示浏览器(使用 OPTIONS 响应)如果他们想使用任何动词或标题从 http://srv02:2300/* 调用此 API,则可以。如果其他域尝试调用此 API 将无法正常工作。

    【讨论】:

      猜你喜欢
      • 2021-10-23
      • 2016-06-08
      • 1970-01-01
      • 2019-08-19
      • 2021-11-17
      • 2021-11-11
      • 2021-12-31
      • 2018-03-02
      • 2019-12-30
      相关资源
      最近更新 更多