启用Cors .Net Core

时间:2019-06-03 10:03:09

标签: .net-core f# cors

在使用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一起使用,并且有一种方法可以使它在不指定任何来源的情况下工作?

1 个答案:

答案 0 :(得分:0)

我认为您需要在services.AddCors函数中使用configureServices方法时添加策略。这是一个等效的示例,使用的配置是根据我在生产环境中使用的有效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