javascript - 如何允许 ASP.NET 使用 CORS

标签 javascript asp.net ajax cors

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

当我导航到页面 http://srv02:2300/all-requests.aspx 时,页面加载正常,除了应该来 self 的 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 here在我的 API 中:

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

    var cors = new EnableCorsAttribute("http://srv02:2400 ", "", ""); config.EnableCors(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,因为建议 here但没有成功。

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

谢谢!

最佳答案

您的全局属性看起来有误。

我认为您希望改变两件事。

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

例如您想要以下内容:

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

这应该指示浏览器(使用 OPTIONS 响应)如果他们想使用任何动词或 header 从 http://srv02:2300/* 调用此 API,就可以了。如果另一个域尝试调用此 API,则不会成功。

关于javascript - 如何允许 ASP.NET 使用 CORS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40497075/

相关文章:

php - 尝试从 formData 上传大文件

php - 检查删除是否成功消息 php ajax jquery mysql

javascript - 在 AngularJS Controller 上通过 ng-click 调用函数时出错?

javascript - "Page Not Found"添加第二个<ons-template>标签时出错

javascript - ASP.NET JavaScript - 无效的 JSON 原语

c# - Linq返回第一个日期

javascript - 如何ajax仅加载html而不加载图像?

javascript - 如果存在 2 个子 div,隐藏父 div?

javascript - 在基本目标语句中排除 tel 和 mailto

jquery - 使用 Ajax.BeginForm Asp.Net MVC 显示 jquery 验证消息