F# 可以从同一个web应用程序使用Giraffe调用您自己的端点吗?

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"

我有一个运行在.NETCore2.2中的F#WebAPI。此应用程序使用长颈鹿

按所述方式设置路由。 例如:

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,当然,正如我所说的,“冒烟测试”类似功能。