是否可以从同一个网络应用程序使用 Giraffe 调用您自己的端点?
Is it possible to call your own endpoint using Giraffe, from that same web app?
我在 .net core 2.2 中有一个 F# WebAPI 运行ning。此应用程序使用长颈鹿。
路由按照描述的方式设置 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 键、外部路由、多环境等问题
欢迎任何想法!
根据Giraffe docs,您定义的webApp是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
我在 .net core 2.2 中有一个 F# WebAPI 运行ning。此应用程序使用长颈鹿。
路由按照描述的方式设置 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 键、外部路由、多环境等问题
欢迎任何想法!
根据Giraffe docs,您定义的webApp是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