0
我在Win 2008 R2 Ent服务器上的IIS中安装了一个asp.net mvc5(带有Angular)网站,并且在服务器本身上运行该网站时,一切正常运行。发出http请求的访问控制头问题
只要我们从服务器外部访问该网站,我得到CORS相关的错误:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost/api/init?space=razor_RAGE&environment=razor_RAGE&clariteConfig=E:\razor_RAGE\master\bin\clarite_config.xml. This can be fixed by moving the resource to the same domain or enabling CORS.
我认为解决方案是正确的头添加到HTTP请求:
'Access-Control-Allow-Origin': 'true'
但是,它似乎并没有解决CORS问题。
下面是我从JavaScript发出请求的例子(所有好的服务器上,但不会在服务器之外的工作):
this.getRazorInitParams = function() {
var deferred = $q.defer();
deferred.notify("Getting init parameters...");
var razorEnvParams = [];
$http({
method: 'GET',
encoding: 'JSON',
headers: {
'Access-Control-Allow-Origin': 'true'
},
url: 'breeze/Rage/GetRazorEnv'
}).success(function (data, status, headers, config) {
razorEnvParams = data;
deferred.resolve(razorEnvParams);
}).error(function (data, status, headers, config) {
console.log("Error in userContext.js, getRazorInitParams " + status);
});
return deferred.promise;
}
下面是从C#API层snipet:
public class initController : ApiController
{
public HttpResponseMessage Get()
{
// space, env, dom, cConf vars all defined here..
string resp = DynAggrClientAPI.initApp(space, env, dom, cConf);
var response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(resp, Encoding.UTF8, "application/json");
return response;
}
}
我正在寻找正确的解决方案。有什么我在这里失踪?
由于事先
鲍勃
我会补充说,这不是一个每个请求的设置,而是一个网站/服务器上的IIS设置。 http://stackoverflow.com/questions/12458444/enabling-cross-origin-resource-sharing-on-iis7 – xDaevax 2014-11-25 14:30:51
Access-Control-Allow-Origin:'*'(需要一个报价)不起作用。我也无法找到在IIS处理程序文章中提到的OPTIONSVerb处理程序。 – 2014-11-25 19:37:13
你能证实客户端收到ACAO头文件吗?我对IIS不太熟悉,所以可能会出现问题。 OPTIONS谓词只针对复杂的请求发送,所以您应该可以忽略它。 编辑:你应该从你的AJAX请求中删除额外的标题(ACAO之一)。它们不是必需的,它们会导致请求变得“复杂”。复杂的请求在服务器端需要一些额外的头文件(正如我的回答中所述)。 – Lapixx 2014-11-26 22:26:28