2 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
查看 Gin API 文檔,您需要調(diào)用context.Abort()而不是從您的方法返回。
Abort 停止系統(tǒng)繼續(xù)調(diào)用鏈中的掛起處理程序。假設(shè)您有一個(gè)授權(quán)中間件,如果授權(quán)失敗(密碼不匹配),它會(huì)驗(yàn)證請(qǐng)求是否獲得授權(quán)。應(yīng)調(diào)用此方法 (Abort()) 以停止實(shí)際處理程序的執(zhí)行。
所以在你的具體情況下
if appId == "" { c.JSON(http.StatusOK, gin.H{"code": "MISSING_APP_ID", "message": "Your request is missing an application id"}) c.Abort() return }

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊
你需要做:
if condition {
c.Abort()
} else {
c.Next()
}
解釋
(注意:這建立在@Landers 的回答之上)
c.Abort()只是設(shè)置一些內(nèi)部標(biāo)志,以某種方式標(biāo)記上下文,指示異常終止。這是有道理的,它是一個(gè)不返回任何內(nèi)容的無(wú)參數(shù)方法,因此您只是為了它的副作用而調(diào)用它。
同樣的事情 c.Next()
由于 go 的控制流(沒(méi)有異常或跳轉(zhuǎn)),很明顯這兩個(gè)方法不會(huì)立即采取任何行動(dòng),而是為下一階段“設(shè)置舞臺(tái)”,想象一下調(diào)用您的CheckAppIdfunc 的Gins 代碼:
// gin code
doStuff()
ctx := getContext()
// this is your CheckAppId
nextAction := FindAction()
nextAction(&ctx)
// here the context is evaluated to see if you either abort or continue.
checkContextStatus(&ctx)
因此,如果您正在調(diào)用c.Abort(),然后c.Next()您將覆蓋中止指示。
- 2 回答
- 0 關(guān)注
- 213 瀏覽
添加回答
舉報(bào)