Как включить 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
]
Исходный файл можно найти здесь.
Вот пример Giraffe, который показывает код для поддержки Cors.
1 ответ
- Добавить пакет: Microsoft.AspNetCore.Cors
В файл.fs добавьте:
открыть Microsoft.AspNetCore.Cors
Добавить 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
В сервисах добавьте 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