gpt4 book ai didi

go - 如何在gin请求上下文中设置数据?

转载 作者:行者123 更新时间:2023-12-01 22:22:03 24 4
gpt4 key购买 nike

我有一段非常简单的代码。一个单一的中间件将应用于所有路由。在此中间件中,将读取 header 字段“x-sentinel-tenant”。如果为空,则返回错误。如果它具有某个值,则将提取该值并将其设置在请求上下文中以供以后使用。
这是我的中间件代码

// VerifyTenant ensures that the user has added tenant information in the header
func VerifyTenant(c *gin.Context) {
requestTenant := c.Request.Header.Get("x-tenant")
if requestTenant == "" {
c.AbortWithStatusJSON(
http.StatusBadRequest,
views.GenerateErrorResponse(
http.StatusBadRequest,
"Please add tenant in the header.",
c.Request.URL.Path,
),
)
return
}
c.Request = c.Request.WithContext(context.WithValue(c, tenant, requestTenant))
}
当我尝试在代码的后续部分中访问此上下文时,将鼠标悬停在ctx值上时,将获得以下数据。
Please notice how there's a context within my context which is absurd
我不确定我在做什么错。这是一段相当简单的代码,表现得很有趣。任何线索将不胜感激。谢谢
当我更新上下文时,我希望“承租人”被添加为另一个字段。这没有发生。多个值不能在同一上下文中共存吗?
我的问题-如何在gin请求上下文中正确设置多个值
这是我尝试访问租户的方式
return ctx.Value("Context").(context.Context).Value("tenant").(string)

最佳答案

https://pkg.go.dev/github.com/gin-gonic/gin?tab=doc#Context.Setfunc (*Context) Set完全可以满足您的需求。一个例子是:

func VerifyTenant(ctx *gin.Context) {
requestTenant := ctx.GetHeader("x-tenant")
if requestTenant == "" {
// Abort
return
}
ctx.Set("x-tenant", requestTenant)
}

func Test(ctx *gin.Context){
// when you need to get the value of "x-tenant"

requestTenant := ctx.GetString("x-tenant")
}

关于go - 如何在gin请求上下文中设置数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62630003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com