ASP.NET 5:访问控制允许源响应

本文关键字:许源 响应 访问控制 NET ASP | 更新日期: 2023-09-27 18:25:25

据我了解,当相应地启用 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 请求时出现以下错误:

对预检请求的响应未通过访问控制检查:否 "访问控制允许源"标头存在于请求的上 资源。因此,不允许访问源"http://localhost"。

ASP.NET 5:访问控制允许源响应

请确保在

Startup.Configure方法中app.UseMvc之前添加app.UseCors,因为您需要在 MVC 中间件之前应用 CORS 中间件。

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();
    });
}