如何允许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是:
- 安装包Microsoft.AspNet.WebApi.Cors
-
由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,它就不会好。
哦..我的坏..这是正确的 – Riad
谢谢卢克! – Riad
@riad没问题 –