不存在 'Access-Control-Allow-Origin' header - asp.net 核心网络 api 针对 .net 框架 4.5.1
No 'Access-Control-Allow-Origin' header is present - asp.net core web api targeting .net framework 4.5.1
我有一个服务器端 RESTful API 是在 c# 中创建的,目标是 .NET Framework 4.5.1,我的 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 cannot load x Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'x' is therefore not allowed access. The response had HTTP status code 502."
来自我客户端的 http 请求中有一个 "Authorization" header,这就是触发预检响应的原因,它有一个有效的令牌等...所以它与这部分。
事实上,如果我针对 .NET Core 1.0 创建完全相同的 RESTful API,它会按预期工作。这让我相信 CORS 和目标 .NET Framework 4.5.1 存在问题,或者现在我必须添加一些明确的逻辑,否则由 .NET Core 1.0 隐式处理。
我的理解是 CORS 中间件应该处理所有这些,有人知道这里可能是什么问题吗?
编辑:
我忘了说这个工作正常 运行 作为本地主机,我只在部署后才看到这个问题。此外,我针对 .NET Framework 4.6.2 测试了此问题,但问题仍然存在。
已解决。
https://github.com/aspnet/Tooling/blob/master/known-issues-vs2017.md#aspnet-core-known-issues
正在使用 visual studio 2017 的不同版本,一些 projects\dependencies 以 .Net Core 1.0 为目标,而另一些以 .Net Core 1.1 为目标,这导致需要不同的运行时。
一旦我们同步到最新版本的 VS2017 (15.2.26430.13),目标是 .Net Core 1.1 并在服务器上安装了新的运行时,问题就消失了。
上面的 CORS 错误实际上是我在调用堆栈中丢失的 502(错误请求)错误的副作用...
我有一个服务器端 RESTful API 是在 c# 中创建的,目标是 .NET Framework 4.5.1,我的 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 cannot load x Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'x' is therefore not allowed access. The response had HTTP status code 502."
来自我客户端的 http 请求中有一个 "Authorization" header,这就是触发预检响应的原因,它有一个有效的令牌等...所以它与这部分。
事实上,如果我针对 .NET Core 1.0 创建完全相同的 RESTful API,它会按预期工作。这让我相信 CORS 和目标 .NET Framework 4.5.1 存在问题,或者现在我必须添加一些明确的逻辑,否则由 .NET Core 1.0 隐式处理。
我的理解是 CORS 中间件应该处理所有这些,有人知道这里可能是什么问题吗?
编辑:
我忘了说这个工作正常 运行 作为本地主机,我只在部署后才看到这个问题。此外,我针对 .NET Framework 4.6.2 测试了此问题,但问题仍然存在。
已解决。
https://github.com/aspnet/Tooling/blob/master/known-issues-vs2017.md#aspnet-core-known-issues
正在使用 visual studio 2017 的不同版本,一些 projects\dependencies 以 .Net Core 1.0 为目标,而另一些以 .Net Core 1.1 为目标,这导致需要不同的运行时。
一旦我们同步到最新版本的 VS2017 (15.2.26430.13),目标是 .Net Core 1.1 并在服务器上安装了新的运行时,问题就消失了。
上面的 CORS 错误实际上是我在调用堆栈中丢失的 502(错误请求)错误的副作用...