gpt4 book ai didi

f# - Suave中带有可选参数的路线

转载 作者:行者123 更新时间:2023-12-04 03:57:05 24 4
gpt4 key购买 nike

我有一个带有hello world终结点的Web服务,如下所示:

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

现在,我想添加一个额外的端点,它可以处理这样的路由: http://localhost:8083/hello/{name}?lang={lang}
此路由应适用于以下URL:
  • http://localhost:8083/hello/FooBar在这种情况下,应设置lang
    的默认值是“en-GB”
  • http://localhost:8083/hello/FooBar?lang=en-GB
  • http://localhost:8083/hello/FooBar?lang=de-DE

  • 但它不适合

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

    只能在查询参数字符串中而不是在路径中允许使用可选参数。

    知道如何使用Suave做到这一点吗?

    最佳答案

    为了处理查询参数,我可能只使用request函数,该函数为您提供了有关原始HTTP请求的所有信息。您可以使用它来检查查询参数:

    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" ]

    关于f# - Suave中带有可选参数的路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36547475/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com