C# 否';访问控制允许原点';存在标头-asp.net核心web api针对.net framework 4.5.1

C# 否';访问控制允许原点';存在标头-asp.net核心web api针对.net framework 4.5.1,c#,asp.net-core-mvc,.net-4.5,http-status-code-502,C#,Asp.net Core Mvc,.net 4.5,Http Status Code 502,我有一个在c#targeting.NETFramework 4.5.1中创建的服务器端RESTful API,我的CORS配置似乎不起作用 public void ConfigureServices(IServiceCollection services) { services.AddCors(options => { options.AddPolicy("AllowAll", builder => {

我有一个在c#targeting.NETFramework 4.5.1中创建的服务器端RESTful API,我的CORS配置似乎不起作用

public void ConfigureServices(IServiceCollection services) {

        services.AddCors(options => {
            options.AddPolicy("AllowAll",
                    builder => {
                        builder.AllowAnyOrigin()
                               .AllowAnyMethod()
                               .AllowAnyHeader()
                               .AllowCredentials();
                    });
        });

        // Add framework services.
        services.AddMvc();
        services.AddOptions();
    }

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
ILoggerFactory loggerFactory) {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        if (env.IsDevelopment()) {
            app.UseDeveloperExceptionPage();
        }

        var options = new JwtBearerOptions {
            Audience = "MyAudience"
            Authority = "MyAuthority"
        };

        app.UseJwtBearerAuthentication(options);
        app.UseCors("AllowAll");
        app.UseMvc();
    }
每次我在控制器中调用以下API时

[Authorize]
[HttpGet]
public Task<JsonResult> Get() {

ICollection<string> abc;
try {
    abc = new List<string>(){"A", "B", "C"};
} catch (Exception) {
    abc = null;
}
return Json(abc);
}
[授权]
[HttpGet]
公共任务Get(){
i收集abc;
试一试{
abc=新列表(){“A”、“B”、“C”};
}捕获(例外){
abc=null;
}
返回Json(abc);
}
我得到以下错误

“XMLHttpRequest无法加载对飞行前请求的x响应未通过访问控制检查:请求的资源上不存在“access control Allow Origin”标头。因此不允许访问源“x”。响应的HTTP状态代码为502。”

来自我的客户端的http请求中有一个“授权”头,这就是为什么会触发飞行前响应,它有一个有效的令牌等等。。。所以它与这部分无关

事实上,如果我针对.NETCore1.0创建了完全相同的RESTfulAPI,它就可以正常工作。这让我相信CORS和瞄准.NET Framework 4.5.1存在问题,或者现在我必须添加一些显式逻辑,否则由.NET Core 1.0隐式处理

我的理解是CORS中间件应该处理所有这些,有人知道这里可能存在什么问题吗

编辑:


我忘了提一下,作为本地主机运行时,它可以很好地工作,我只在部署之后才看到这个问题。另外,我测试了针对.NET Framework 4.6.2的目标,问题仍然存在。

这已经解决

使用了不同版本的visual studio 2017,一些项目\依赖项针对.Net Core 1.0,其他项目\依赖项针对.Net Core 1.1,这导致需要不同的运行时

一旦我们同步到最新版本的VS2017(15.2.26430.13),目标是.Net Core 1.1,并在服务器上安装了新的运行时,问题就消失了


上面的CORS错误实际上是我在调用堆栈中丢失的502(错误请求)错误的副作用…

我可能遇到了同样的问题。当来源为“任意”时,CORS不允许您指定凭据。要在CORS中使用凭据,您必须标识特定的允许来源。不过,我不确定这是否是你的问题。我将.Net 4.6.2与CORS一起使用。有关这一点的详细信息,请参阅:“当响应认证请求时,服务器必须在Access Control Allow origin标头的值中指定原点,而不是指定“*”通配符。”@Amy我已经检查了响应头,它们正是它们所需要的,这让我相信CORS中间件正在做它的工作,也许部分原因是,访问控制允许凭据:true和访问控制允许来源:。我忘了提一下,在本地主机上运行时,它可以很好地工作,但是当它被部署时,我看到了错误。我还尝试升级到目标.NET Framework 4.6.2,但我看到了相同的问题。嗯,如果它在本地主机上运行良好,但在部署后没有运行,则表明部署环境中存在配置问题,而不是代码本身的问题。我的CORS代码与你的不同,但我看你的代码没有问题。@Amy我发现了问题,但我真的无法解释引擎盖下发生了什么。