第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在使用 router.Any 和通配符處理請(qǐng)求后保留路徑參數(shù)

如何在使用 router.Any 和通配符處理請(qǐng)求后保留路徑參數(shù)

Go
qq_笑_17 2022-11-08 15:51:06
在我的情況下,需要捕獲請(qǐng)求并檢查是否是內(nèi)部請(qǐng)求。如果不是,則將這些請(qǐng)求重定向到其他處理函數(shù)。網(wǎng)址示例:1. URL: http://localhost/internal/dosomething12. URL: http://localhost/internal/dosomething2/:id3. URL: http://localhost/overview4. URL: http://localhost/xxx只有以開頭的 URIinternal應(yīng)該在我自己的句柄函數(shù)中處理(案例 1 和 2)。具有任何請(qǐng)求方法的其他人將代理到另一個(gè)函數(shù)(案例 3 和 4)。我正在嘗試這樣使用router.Any("/*uri", handlerExternal):func handlerExternal(c *gin.Context) {    path := c.Param("uri")    if strings.HasPrefix(path, "/internal/") {        uri := strings.Split(path, "/")        switch uri[2] {        case "dosomething1":            doInternal(c)        }    } else {        doExternal(c)    }}但是使用此解決方案,doInternal(c)無法捕獲路徑參數(shù),:id如http://localhost/internal/dosomething2/:id這種情況有更好的解決方案嗎?
查看完整描述

1 回答

?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊

使用子引擎。

gin.New您可以僅使用內(nèi)部路由實(shí)例化引擎而不運(yùn)行它。相反,您將上下文從您的Any路線傳遞到Engine.HandleContext.

這將從主引擎?zhèn)鬟f上下文,并將根據(jù)子路由中的占位符匹配路徑參數(shù)。

您可以像往常一樣在子引擎上聲明路由:

func main() {

    internalEngine := gin.New()

    internalEngine.GET("/internal/dosomething1", func(c *gin.Context) { c.JSON(200, "ok") })

    internalEngine.GET("/internal/dosomething2/:id", func(c *gin.Context) { c.JSON(200, c.Param("id")) })


    mainEngine := gin.New()

    mainEngine.Any("/*uri", func(c *gin.Context) {

        path := c.Param("uri")

        if strings.HasPrefix(path, "/internal/") {

            uri := strings.Split(path, "/")

            switch uri[2] {

            case "dosomething1", "dosomething2":

                internalEngine.HandleContext(c)

            }

        } else {

            doExternal(c)

        }

    })

    mainEngine.Run(":8800")

}

您還可以c.Request.URL.Path在將上下文中繼到子引擎之前進(jìn)行修改,例如internal,如果您愿意,可以刪除前綴。


現(xiàn)在,如果您嘗試 GET 請(qǐng)求:


http://localhost:8855/internal/dosomething2/1234

它將回顯輸出:


"1234"


查看完整回答
反對(duì) 回復(fù) 2022-11-08
  • 1 回答
  • 0 關(guān)注
  • 126 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)