1

应该是一个简单的问题,但我找不到详细说明如何执行此操作的 API 文档。

我有这样的控制器功能

let loadScreen (ctx: HttpContext) (number: int) : HttpHandler = htmlString "etc"

还有一个路由器,它定义了两条使用该功能的路由。一个将默认值 0 传递给number参数。另一个允许用户指定一个数字

let PageRouter = router {
    (* Works fine: *)
    get "/order" (warbler (fun (_, ctx) -> PageController.loadScreen ctx 0))
    (* Does not compile: *) 
    getf "/order/%i" (fun number func ctx -> PageController.loadScreen ctx number)
}

这给出了错误

This expression was expected to have type 'HttpFuncResult' but here has type 'HttpFunc -> 'a -> HttpFuncResult' 

我知道这是一个简单的缺失,但不知道是什么。

干杯

4

1 回答 1

3

get组合器需要第二个类型的参数HttpHandler。这是您的代码中的内容:

get "/order" (warbler (fun (_, ctx) -> PageController.loadScreen ctx 0))
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                         /
                                This is an HttpHandler value

getf,另一方面,期望不同的第二个参数。它需要一个int以 a 作为参数并返回aHttpHandler作为结果的函数。

所以只要坚持fun number -> 你现有的HttpHandler,瞧:

getf "/order/%i" (fun number -> 
  (warbler (fun (_, ctx) -> PageController.loadScreen ctx number))
)
于 2022-01-03T15:57:48.863 回答