ASP.net的英文版服务器设置?

时间:2016-06-17 17:35:18

标签: asp.net asp.net-web-api cors

我正在尝试在项目的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中的东西?

3 个答案:

答案 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进行的转换。连接到服务器的问题是我的身份令牌。谢谢你的建议!