我想用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中实现此目标的最佳方法是什么?
答案 0 :(得分:2)
您正确地假设Webpart
是值,因此只需计算一次。 (请参见this)。
您需要使用闭包来获取所需的内容:
path "/count" >=> (fun ctx ->
async {
let c = counter in return! OK (string c) ctx
})