2017-10-12 9 views
2

Je ne parviens pas à effectuer une opération Post à l'aide de l'infrastructure Giraffe sur le serveur lorsqu'un client Elm envoie la demande.Comment activer CORS dans Giraffe?

Je reçois le message suivant lors d'une tentative de tester une requête http:

info: Microsoft.AspNetCore.Hosting.Internal.WebHost 1

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

Microsoft.AspNetCore.Hosting.Internal. WebHost: Informations: Demande

à partir de HTTP/1.1 OPTIONS http://localhost:5000/register 0 dbug: Microsoft.AspNetCore.StaticFiles.StaticFileM iddleware 1

OPTIONS requests are not supported 

La mise en œuvre de services est la suivante:

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 
     } 

Je puis essayé ce qui suit et observé le même résultat:

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

Annexe:

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

Le fichier source peut être trouvé here.

Elm and CORS

WebAPI enable Cors

Voici un Giraffe sample qui montre le code pour soutenir Cors.

+0

Vous effectuez la demande d'un autre domaine à localhost: 5000 (par exemple en utilisant la commande servent angulaire)? Il semble que vous ayez affaire à une [demande de contrôle en amont de CORS] (https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS). –

+0

Mon client est également un hôte local mais avec un numéro de port différent. Ne devrais-je pas être en mesure de tester une application Web et un service de traitement distinct sur ma machine locale? –

Répondre

1
  1. package Ajouter: Microsoft.AspNetCore.Cors
  2. Dans le fichier .fs ajouter:

    Microsoft.AspNetCore.Cors ouvert

  3. Ajouter UseCors par exemple:

    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. Dans les services ajouter 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 
    

+0

Si vous lancez 'dotnet new giraffe', il configurera automatiquement Cors dans le modèle par défaut, donc vous pouvez toujours créer une nouvelle application pour rechercher rapidement comment cela est fait. – dustinmoris