使用 Suave 自定义动态响应?

Custom dynamic response with Suave?

我想用 Suave 构建一个简单的计数器。

[<EntryPoint>]
let main argv =

  let mutable counter = 0;

  let app =
    choose
      [
        GET
        >=> choose
          [
            path "/" >=> OK "Hello, world. ";
            path "/count" >=> OK (string counter)
          ]
        POST
        >=> choose
          [
            path "/increment"
            >=> (fun context -> async {
              counter <- counter + 1
              return Some context
            })
          ]
      ]

  startWebServer defaultConfig app
  0

但是,使用我当前的解决方案,/count 处的计数永远不会更新。

我认为这是因为 WebPart 是在应用程序启动时计算的,而不是针对每个请求计算的。

在 Suave 中实现此目标的最佳方法是什么?

你假设 Webparts 是值,所以计算一次是正确的。 (参见 this)。

你需要使用闭包来得到你想要的:

path "/count" >=> (fun ctx ->
    async {
        let c = counter in return! OK (string c) ctx
    })