Как включить CORS в Giraffe?

Я не могу успешно выполнить операцию Post с использованием инфраструктуры Giraffe на сервере, когда клиент Elm отправляет запрос.

При попытке проверить http-запрос я получаю следующее сообщение:

информация: Microsoft.AspNetCore.Hosting.Internal.WebHost 1

  Request starting HTTP/1.1 OPTIONS http://localhost:5000/register  0 

Microsoft.AspNetCore.Hosting.Internal.WebHost: Информация: Запрос

НАЧАЛО HTTP/1.1 ОПЦИИ http://localhost:5000/register 0 dbug: Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware 1

  OPTIONS requests are not supported

Реализация сервиса заключается в следующем:

let private registrationHandler = 
    fun(context: HttpContext) -> 
        async {
            let! data = context.BindJson<RegistrationRequest>()
            match register data with
              | Success profile -> return! json profile context
              | Failure         -> return! (setStatusCode 400 >=> json "registration failed") context
        }

Затем я попытался сделать следующее и увидел тот же результат:

let private registrationHandler = 
    fun(context: HttpContext) -> 
        async {
            return! text "hello world" context
        }

Приложение:

    POST >=> 
        choose [
            route "/register" >=> registrationHandler
        ]

Исходный файл можно найти здесь.

Вяз и корс

WebAPI включить Cors

Вот пример Giraffe, который показывает код для поддержки Cors.

1 ответ

  1. Добавить пакет: Microsoft.AspNetCore.Cors
  2. В файл.fs добавьте:

    открыть Microsoft.AspNetCore.Cors

  3. Добавить UseCors например:

    let configureApp (app : IApplicationBuilder) = app.UseGiraffeErrorHandler errorHandler app.UseStaticFiles() |> ignore app.UseAuthentication() |> ignore app.UseCors(new Action<_>(fun (b: Infrastructure.CorsPolicyBuilder) -> b.AllowAnyHeader() |> ignore; b.AllowAnyMethod() |> ignore)) |> ignore app.UseGiraffe webApp

  4. В сервисах добавьте cors:

    let configureServices (services : IServiceCollection) = let sp = services.BuildServiceProvider() let env = sp.GetService() let viewsFolderPath = Path.Combine(env.ContentRootPath, "Views")

    services
        .AddCors()
        .AddAuthentication(authScheme)
        .AddCookie(cookieAuth)
    |> ignore
    

Другие вопросы по тегам