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