繁体   English   中英

ASP.NET 5: Access-Control-Allow-Origin 响应

[英]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.UseMvcStartup.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM