F# 可以从同一个web应用程序使用Giraffe调用您自己的端点吗?
我有一个运行在.NETCore2.2中的F#WebAPI。此应用程序使用长颈鹿 按所述方式设置路由。 例如:F# 可以从同一个web应用程序使用Giraffe调用您自己的端点吗?,f#,f#-giraffe,F#,F# Giraffe,我有一个运行在.NETCore2.2中的F#WebAPI。此应用程序使用长颈鹿 按所述方式设置路由。 例如: let webApp = choose [ GET >=> choose [ route "/" >=> text "index" route "/ping" >=> text "pong" route "/error"
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") ]
让webApp=
选择[
获取>=>
选择[
路由“/”>=>文本“索引”
路由“/ping”>=>文本“pong”
路由“/错误”>=>(有趣的是“出错了!”)
路由“/login”>=>loginHandler
路由“/注销”>=>注销authScheme>=>文本“已成功注销”
路由“/user”>=>mustBeUser>=>userHandler
]
路线“/car”>=>bindModel无json
路由“/car2”>=>tryBindQuery parsingErrorHandler无(validateModel xml)
RequestErrors.notFound(文本“未找到”)]
我们有一个healthcheck,我们希望从应用程序内部运行,并根据这些路由运行-但是我们不希望对我们的API进行外部调用(例如,使用HttpClient或类似工具)
是否可以在内部调用这些路由,而不只是调用路由到的函数?理想情况下,我们希望我们的路由也能在所有端点上正常工作
当然,我们已经尝试过从外部获取HttpClientFactory->HttpClient,但它会导致API密钥、外部路由、多环境等问题
任何想法都欢迎 根据您定义的webApp,它是HttpHandler。从文档:
键入HttpFuncResult=Task
键入HttpFunc=HttpContext->HttpFuncResult
键入HttpHandler=HttpFunc->HttpContext->HttpFuncResult
choose是一个组合器,它获取HttpHandler列表并形成另一个HttpHandler
如您所见,HttpHandler是一个函数。因此,您可以模拟HttpContext,并尝试使用HttpFunc参数fun\uUx->None调用webApp。比如:
让httpResult=webApp(乐趣->无)模拟上下文
这样的健康检查会检测到哪些类型的问题?从外部调用运行状况检查端点有助于检测系统是否不运行,但从内部-从内部-检查依赖性,如Azure Blob存储、服务总线队列-我们依赖的其他API,当然,正如我所说的,“冒烟测试”类似功能。