[英]ASP.NET 5: Access-Control-Allow-Origin in response
据我了解,当相应地启用 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 '。
请确保您添加app.UseCors
之前app.UseMvc
在Startup.Configure
方法,因为你需要的CORS中间件的MVC中间件之前被应用。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
...
//Add CORS middleware before MVC
app.UseCors("AllowAll");
app.UseMvc(...);
}
否则,请求将在应用CORS中间件之前完成。 这是因为UseMvc
调用UseRouter
,最终添加了RouterMiddleware
,并且当找不到请求的路由处理程序时,此中间件仅执行下一个配置的中间件。
在 .Net Core Web API 5.0 中的Configure
方法中,您必须在其他方法之前添加app.UseCors
,如下所示:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
...
}
//add CORS
app.UseCors();
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.