如何允许CORS for ASP.NET

问题描述:

我试图从JS/Ajax向我的WebAPI发出请求时遇到问题。在我的解决方案中,我有一个在srv02:2400上发布的Web API和在srv02上发布的我的网站:2300如何允许CORS for ASP.NET

当我导航到页面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. 

但是,如果我把网址http://srv02:2400/api/requests/find/1并粘贴到浏览器中,它让我正确的JSON清单!

我试图在全球范围内启用CORS的建议here在我的API是:

  1. 安装包Microsoft.AspNet.WebApi.Cors
  2. 由addding以下更新我的WebApiConfig.cs :

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

但是,这没有奏效。

正如我前面提到的,我做我的请求作为阿贾克斯多个请求

$.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 URL)的URL,即:2300:2400
  • 您选择了无效的标题和方法(动词)。你需要在这里使用特定的值,或者*(如果你正在全球应用这可能更有意义)。

如您想以下几点:

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

这应该指示浏览器(使用OPTIONS响应),如果他们想从http://srv02:2300/*任何动词或标题,其确定调用此API。如果另一个域试图调用这个API,它就不会好。

+0

哦..我的坏..这是正确的 – Riad

+0

谢谢卢克! – Riad

+0

@riad没问题 –