使用Suave自定义动态响应?

时间:2018-12-31 12:34:03

标签: f# suave

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

3

但是,在我当前的解决方案中,[<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是在启动应用程序时计算的,而不是针对每个请求。

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

1 个答案:

答案 0 :(得分:2)

您正确地假设Webpart是值,因此只需计算一次。 (请参见this)。

您需要使用闭包来获取所需的内容:

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