我正在尝试在项目的Web API层中实现CORS,并限制API允许请求的域。我在我的Startup.cs中使用app.UseCors()方法来全局设置CORS:
new public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
SystemConfiguration config = base.InitializeWebApiConfiguration();
// add our Cors Policy
app.UseCors(new CorsOptions
{
PolicyProvider = new CorsPolicyProvider
{
PolicyResolver = context => Task.FromResult(CorsPolicyHelper.GetCorsPolicy())
}
});
var authorizeAttribute = new AuthorizeAttribute();
config.HttpConfiguration.Filters.Add(authorizeAttribute);
app.UseNinjectMiddleware(() => this._kernel.Value);
app.UseNinjectWebApi(config.HttpConfiguration);
InitializeMappingProfiles();
}
CorsPolicyHelper只是设置一个CorsPolicy对象,其中包含Headers,Methods,Origins等的设置:
-AllowAnyMethod = true
-AllowAnyHeader = true
-SupportCredentials = true
-PreflightMaxAge = 604800(7天)
-Origins:“https://example.dev.com”,“https://example-ci.test.com”,“https://example-qa.test.com”
我遇到的问题是CORS正在开发我的开发和CI服务器,但它在我的QA服务器上不起作用。我的请求具有正确的来源“https://example-qa.test.com”,但是resposne标头不包含“Access-Control-Allow-Origin”,我回来了:
XMLHttpRequest无法加载https://services-qa.test.com/api/data/。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“https://example-qa.test.com”访问。响应的HTTP状态代码为500。
我不确定我的dev,CI和QA服务器之间有什么区别。它们应该是一样的。但有可能我需要在我的QA服务器上更改服务器设置才能使其正常工作吗?可能是IIS中的东西?
答案 0 :(得分:1)
在您的Web API的web.config中尝试此操作(此版本已删除,但我确定您可以将其整合在一起)。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
答案 1 :(得分:0)
所以,它的工作分为2个。我的理解是,要使预检请求成功,需要将IIS站点设置为允许匿名访问。检查所有三个框上的IIS设置以进行验证。
答案 2 :(得分:0)
它最终成了一个不同的问题。我上面描述的app.UseCors()方法确实可以全局启用CORS。问题出在我对QA环境的web.config进行的转换。连接到服务器的问题是我的身份令牌。谢谢你的建议!