我在Win 2008 R2 Ent服务器上的IIS中安装了一个asp.net mvc5(带有Angular)网站,并且在服务器本身运行该站点时一切正常。
一旦我们从服务器外部访问该站点,我就会收到与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;
}
}
我正在寻找合适的解决方案。这里有什么我想念的吗?
提前感谢,
鲍勃
答案 0 :(得分:1)
标头的值应该是特定域或星号,以指示CORS请求可以来自任何域。
Access-Control-Allow-Origin: 'http://example.org'
或
Access-Control-Allow-Origin: '*'
另请注意,您无法将多个域“列入白名单”。这是一个或全部。
如果您要使用所谓的“复杂”请求(即除了简单的GET或POST请求之外的其他请求),您还需要设置Access-Control-Allow-Methods
字段,以及是否要检索特定标头,Access-Control-Allow-Headers
也是如此(虽然在这种情况下,不需要它们)。