我有一个运行在.net core 2.2中的F#WebAPI。此应用程序使用长颈鹿。
按here中所述的方式设置路由。 一个例子:
let webApp =
choose [
GET >=>
choose [
route "/" >=> text "index"
route "/ping" >=> text "pong"
route "/error" >=> (fun _ _ -> failwith "Something went wrong!")
route "/login" >=> loginHandler
route "/logout" >=> signOut authScheme >=> text "Successfully logged out."
route "/user" >=> mustBeUser >=> userHandler
]
route "/car" >=> bindModel<Car> None json
route "/car2" >=> tryBindQuery<Car> parsingErrorHandler None (validateModel xml)
RequestErrors.notFound (text "Not Found") ]
我们有一个运行状况检查,希望从应用程序内部运行,并针对这些路由运行-但是我们不想对我们的API进行外部调用(例如,使用HttpClient或类似程序)。
是否可以在内部调用这些路由-而不是简单地调用它们路由到的函数?理想情况下,我们希望确保路由也能在所有端点上正常工作。
当然-我们已经尝试从外部获取HttpClientFactory-> HttpClient了,但这会导致API密钥,外部路由,多环境等问题。
任何想法都会受到欢迎!
答案 0 :(得分:2)
根据您定义的Giraffe docs web应用程序是HttpHandler。来自文档:
type HttpFuncResult = Task<HttpContext option>
type HttpFunc = HttpContext -> HttpFuncResult
type HttpHandler = HttpFunc -> HttpContext -> HttpFuncResult
choose是一个组合器,它接收HttpHandler列表并形成另一个HttpHandler。
如您所见,HttpHandler是一个函数。因此,您可以模拟HttpContext并尝试使用HttpFunc参数fun _-> None调用webApp。像这样:
let httpResult = webApp (fun _ -> None) mockedContext