启用 Cors .Net Core

Posted

技术标签:

【中文标题】启用 Cors .Net Core【英文标题】:Enable Cors .Net Core 【发布时间】:2019-10-18 20:56:18 【问题描述】:

在使用 WebApi2 的 C# 中,我使用 WebApi2 定义了以下端点:

[EnableCors("*", "*", "Post", SupportsCredentials = true)]
[HttpPost]
[Route("myRouting")]
public HttpResponseMessage MyEndPoint()

    //...some code

它通过调用它来工作:

var request = new XMLHttpRequest();
request.open('POST', url, true);
request.withCredentials = true;
request.send();

尝试将其升级到 F# .Net Core,但未成功:

let webApp =
    choose [
        route "/" >=> text "Description"
        POST >=> routef "myRouting" myEndPoint ]

let configureCors (builder : CorsPolicyBuilder) =
    builder.AllowAnyOrigin()
           .AllowAnyHeader()
           .WithMethods("POST")
           .AllowCredentials()
           |> ignore

let configureApp (app : IApplicationBuilder) =
    app.UseCors(configureCors)
       .UseGiraffe webApp

let configureServices (services : IServiceCollection) =
    services.AddCors()
            .AddGiraffe() |> ignore

收到错误当请求的凭据模式为“包含”时,响应中“Access-Control-Allow-Origin”标头的值不能是通配符“”。*

我知道指定 AllowAnyOrigin 和 AllowCredentials 是不安全的配置,可能导​​致跨站点请求伪造。当应用同时配置了这两种方法时,CORS 服务会返回无效的 CORS 响应。

为什么它可以与WebApi2 一起工作,有没有办法让它在不指定任何来源的情况下工作?

【问题讨论】:

如果您尝试 .AllowAnyMethod() 是否有效?您可能需要允许“OPTIONS”方法 好吧,我在预检时没有得到 405。实际上根本没有预检。 【参考方案1】:

我认为在configureServices 函数中使用services.AddCors 方法时需要添加策略。这是一个等效示例,使用您的配置改编自我在生产中使用的工作 F# .NET Core Web API:

let configureServices (services : IServiceCollection) =
    services.AddCors(fun options -> 
            options.AddPolicy("AllowAll", fun builder -> 
                 builder.AllowAnyHeader()
                        .AllowAnyOrigin()
                        .WithMethods("POST")
                        .AllowCredentials() |> ignore))
            .AddGiraffe()
            |> ignore

【讨论】:

以上是关于启用 Cors .Net Core的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET Core 中启用 CORS

如何在 Asp.Net Core 3.0 WebAPI 中启用 CORS

C# Net Core:在 API 中启用 Cors 后,仍处于 CORS 策略阻止状态

在 ASP.Net 5 / Core 中启用跨域资源共享 (CORS)

ASP.NET Core Cors 已启用但无法正常工作

使用 .NET Core 和 Angular 客户端启用 CORS 错误后,它仍然会发生