Routen mit optionalen Parametern in Suave


Dustinmoris

Ich habe einen Webdienst mit einem Hallo-Welt-Endpunkt wie diesem:

let app =
  choose [ 
      GET >=> 
        choose [ 
          path "/hello" >=> OK "Hello World!"
          pathScan "/hello/%s" (fun name -> OK (sprintf "Hello World from %s" name)) ]
      NOT_FOUND "Not found" ]

[<EntryPoint>]
let main argv = 
  startWebServer defaultConfig app
  0

Jetzt möchte ich einen zusätzlichen Endpunkt hinzufügen, der Routen wie diese verarbeiten kann: http://localhost:8083/hello/{name}?lang={lang}

Diese Route sollte für die folgenden URLs funktionieren:

aber es sollte nicht funktionieren für

http: // localhost: 8083 / hello / FooBar / de-GB

Optionale Parameter sollten nur in einer Abfrageparameterzeichenfolge und nicht im Pfad zulässig sein.

Irgendeine Idee, wie man dies mit Suave erreicht?

Tomas Petricek

Für die Behandlung von Abfrageparametern würde ich wahrscheinlich nur die requestFunktion verwenden, die Ihnen alle Informationen über die ursprüngliche HTTP-Anforderung liefert. Damit können Sie die Abfrageparameter überprüfen:

let handleHello name = request (fun r ->
  let lang = 
    match r.queryParam "lang" with
    | Choice1Of2 lang -> lang
    | _ -> "en-GB"
  OK (sprintf "Hello from %s in language %s" name lang)) 

let app =
  choose [ 
      GET >=> 
        choose [ 
          path "/hello" >=> OK "Hello World!"
          pathScan "/hello/%s" handleHello ]
      NOT_FOUND "Not found" ]

Verwandte Artikel


Express app.use Routen mit optionalen Parametern

Loki Ich versuche, Express auf allen meinen Routen optionale Parameter hinzuzufügen. Hier ist ein Teil meines Codes: const express = require('express'); const bodyParser = require('body-parser'); const apiRoutes = require('./routes/apiRoutes'); const app = ex

Fügen Sie Routen einen Bereich mit optionalen Parametern hinzu

Urmurmur Ich möchte keine Administratorgerüste für neue Ressourcen erstellen. Aber ich möchte, dass meine Modelle von gesteuert werden Admin::VariousResourcesController. Ich möchte einen :classParameter an diesen Controller übergeben, um diese Klasse zu instan

Werksmuster - mit optionalen Parametern

Andrew Ich habe eine Fabrik: public static class AdapterFactory { public static IAdapter GetAdapter(AdapterType claimType, int mid, int tid, int siteId, string version) { } } Mein Problem ist, dass manchmal die Parameter mid, tid, siteId und

Konstruktor mit optionalen Parametern

JokerMartini Ich habe eine Unterklasse von QLineEditin Qt erstellt und möchte den Benutzern die Möglichkeit geben, einige optionale Parameter beim Initialisieren/Erstellen des Steuerelements festzulegen. Ich weiß, dass dies so gehandhabt wird, wie ich den Kons

ViewComponent mit optionalen Parametern

Camilo Terevinto Ich erstelle eine Reihe von Ansichtskomponenten, die Filter für verschiedene Ansichten darstellen. Sie funktionieren bisher großartig, aber ich verstehe dieses Verhalten, das ich erlebe, nicht. Wenn ich zwei InvokeAsync deklariere: public asyn

RewriteRule mit optionalen Parametern

culvanen Ich habe mehrere Stunden versucht, eine URL zu ändern, indem ich optionale Parameter einfüge Meine Umschreibregeln funktionieren nicht not Es besteht aus einer ID, einem Slug und den beiden optionalen Parametern "-season- {number} -" und "-episode -"

Routen mit falschen Parametern

Luis E. Ich habe folgenden Weg: resources :users, only: [] do resources :events, only: %i[index] delete :close_account, on: :member end Aus irgendeinem Grund werden Routen mit unterschiedlichen Parametern generiert: GET /backoffice/users/:user

Oracle - Indexverwendung mit optionalen Parametern

Superdooperhero Ich benutze den folgenden Trick, um eine Spalte mit einigen Nullen indizieren zu können: create index xx_people_idx1 on xx_people(id_number, -1); Das funktioniert super. Leider hilft dies nicht, wenn Sie optionale Parameter verwenden: select *