我有一个服务器端 RESTful API,它是在针对 .NET Framework 4.5.1 的 c# 中创建的,而我拥有的 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);
}
我收到以下错误...
“XMLHttpRequest 无法加载 x 对预检请求的响应未通过访问控制检查:请求的资源上不存在 'Access-Control-Allow-Origin' 标头。因此不允许访问源 'x'。响应具有 HTTP 状态代码 502。”
我的客户端的http请求中有一个“授权”标头,这就是触发预检响应的原因,它有一个有效的令牌等......所以它与这部分无关。
事实上,如果我针对 .NET Core 1.0 创建完全相同的 RESTful API,它会按预期工作。这让我相信,要么 CORS 存在问题并针对 .NET Framework 4.5.1,要么现在我必须添加一些明确的逻辑,否则 .NET Core 1.0 会隐式处理这些逻辑。
我的理解是 CORS 中间件应该处理所有这些,有谁知道这里可能存在什么问题?
编辑:
我忘了提到这作为本地主机运行良好,我只在部署后看到这个问题。此外,我测试了这个针对 .NET Framework 4.6.2 的问题,但问题仍然存在。