【发布时间】:2016-03-08 01:01:47
【问题描述】:
据我了解,当相应启用 CORS 时,响应模型应包含以下标头信息(前提是我要允许所有内容):
Access-Control-Allow-Origin: *
Access-Control-Allow-Method: *
Access-Control-Allow-Header: *
在Startup启用它:
public void ConfigureServices(IServiceCollection services)
{
//...
services.AddCors();
services.ConfigureCors(options =>
{
options.AddPolicy("AllowAll", p => p.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader().AllowCredentials());
});
//...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
//...
app.UseCors("AllowAll");
//...
}
问题是这些标头都没有返回,我在尝试从 API 请求时收到以下错误:
对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。 Origin 'http://localhost' 因此不允许访问。
【问题讨论】:
-
chrome 控制台是否出现此错误?
-
你在MVC中间件之前注册了Cors中间件吗?你能分享更多关于你的
Configure方法的信息吗? -
正如 Kiran 所说,如果您在
app.UseMvc之后在Startup.Configure方法中添加了app.UseCors,这将不起作用。您需要在 MVC 中间件之前添加 Cors 中间件。 (顺便说一句,在RC1中已经没有ConfigureCors方法了,选项可以直接传递给AddCors方法) -
@DanielJ.G.,正确的顺序(
app.UseCors在app.UseMvc之前)对我有用。请将此添加为答案,以便我投票赞成:)谢谢!这很烦人,因为latest docs 中没有提到它。 -
我没有app.UseMvc() 只有:
app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
标签: c# cors asp.net-core azure-web-app-service asp.net-core-mvc