Suave - Контроль, когда ответы "кэшируются" или пересчитываются
Я хочу понять, как контролировать, когда ответы "кэшируются" по сравнению с тем, когда они "пересчитываются".
В качестве примера:
[<EntryPoint>]
let main [| port |] =
let config =
{ defaultConfig with
bindings = [ HttpBinding.mk HTTP IPAddress.Loopback (uint16 port) ]
listenTimeout = TimeSpan.FromMilliseconds 3000.
}
let appDemo:WebPart =
DateTime.Now.ToString()
|> sprintf "Server timestamp: %s"
|> Successful.OK
startWebServer config appDemo
Если я запускаю вышеуказанный веб-сервер и нажимаю на него несколько раз, то каждый раз получаю одну и ту же метку времени. Что, я думаю, имеет смысл; appDemo
это просто выражение, которое вычисляется впервые и больше никогда, верно?
В этих обстоятельствах я мог бы хотеть appDemo
быть "пересчитанным" для каждого запроса. Как я могу это сделать? Я не могу найти пример в документации.
1 ответ
Попробуйте это - не уверен, насколько высоко он набрал по шкале "идиоматического учтивости":
let appDemo:WebPart =
request (fun req ->
DateTime.Now.ToString()
|> sprintf "Server timestamp: %s"
|> Successful.OK)
Вы правы в том, что видите одно и то же значение, потому что оно фиксируется во время оценки appDemo. Однако это свойство того, как работает F#, и не имеет ничего общего с Suave, кеширующим его.
Обратите внимание, что WebPart
тип является псевдонимом для HttpContext -> Async<HttpContext option>
функция - так что по своей сути она поддается пересчету на каждый запрос, а не рассчитывается один раз.