簡體   English   中英

是否可以使用 Giraffe 從同一個 Web 應用程序調用您自己的端點?

[英]Is it possible to call your own endpoint using Giraffe, from that same web app?

我有一個在 .net core 2.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") ]

我們有一個健康檢查,我們希望從應用程序內部運行,並針對這些路由運行 - 但是我們不想對我們的 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM