Golang Go语言中beego get 请求参数为啥会自动转小写

发布于 1周前 作者 sinazl 来自 Go语言

Golang Go语言中beego get 请求参数为啥会自动转小写

Route:

 beego.ControllerComments{
 Method: "Get",
 Router: `/:userNAME`,
 AllowHTTPMethods: []string{"get"},
 MethodParams: param.Make(),
 Filters: nil,
 Params: nil}

日志:

aaa=> &{0xc000138fc0 <nil> [:username] [hjkhsbnmn123] map[RouterPattern:/v1/object/:userNAME] {{0 0} 0 0 0 0} []  <nil>}2019/12/03 14:24:28.292 [D] [server.go:2802]  |      127.0.0.1| 200 |      951.8µs|   match| GET      /v1/object/hjkhsbnmn123   r:/v1/object/:userNAME

发现,参数竟然被转小写了...


更多关于Golang Go语言中beego get 请求参数为啥会自动转小写的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

在 route 文件里有个 beego.AutoPrefix()函数,然后

func (p ControllerRegister) AddAutoPrefix(prefix string, c ControllerInterface) {
reflectVal := reflect.ValueOf©
rt := reflectVal.Type()
ct := reflect.Indirect(reflectVal).Type()
controllerName := strings.TrimSuffix(ct.Name(), “Controller”)
for i := 0; i < rt.NumMethod(); i++ {
if !utils.InSlice(rt.Method(i).Name, exceptMethod) {
route := &ControllerInfo{}
route.routerType = routerTypeBeego
route.methods = map[string]string{"
": rt.Method(i).Name}
route.controllerType = ct
pattern := path.Join(prefix, strings.ToLower(controllerName), strings.ToLower(rt.Method(i).Name), “")
patternInit := path.Join(prefix, controllerName, rt.Method(i).Name, "
”)
patternFix := path.Join(prefix, strings.ToLower(controllerName), strings.ToLower(rt.Method(i).Name))
patternFixInit := path.Join(prefix, controllerName, rt.Method(i).Name)
route.pattern = pattern
for m := range HTTPMETHOD {
p.addToRouter(m, pattern, route)
p.addToRouter(m, patternInit, route)
p.addToRouter(m, patternFix, route)
p.addToRouter(m, patternFixInit, route)
}
}
}
}

patternFix := path.Join(prefix, strings.ToLower(controllerName), strings.ToLower(rt.Method(i).Name))
这句话

更多关于Golang Go语言中beego get 请求参数为啥会自动转小写的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


#1 大佬牛批, 新手看半天没看懂

#1 感觉有点坑, beego 的文档没找到… 难道 go 圈的人, 都是看源码的吗

深夜跟楼主撩骚一下,想请问一下这个冬天收不收实习生?用 Go 接过一个客服系统,算法竞赛选手,拿过全国二等奖

在Golang中使用Beego框架时,如果遇到GET请求参数自动转为小写的情况,这通常与URL查询字符串的处理有关。以下是一些可能的原因和解释:

  1. URL标准化:Web服务器或框架在处理URL时,可能会将查询参数名标准化为小写。这主要是为了确保参数名的一致性,避免大小写差异导致的处理错误。虽然HTTP标准本身不强制要求参数名大小写敏感,但不同服务器和框架实现可能有所不同。

  2. Beego框架特性:Beego框架在处理GET请求参数时,可能默认采用了将参数名转为小写的策略。这是为了简化参数处理,确保无论客户端如何发送参数名(大写、小写或混合),服务器端都能以统一的方式访问它们。

  3. 解决方案

    • 确认需求:首先确认你的应用是否真的需要区分参数名的大小写。如果不需要,接受这种默认行为可能更简单。
    • 自定义处理:如果确实需要区分大小写,可以在Beego的控制器中手动解析原始查询字符串,而不是依赖框架的自动解析功能。
    • 查阅文档和社区:查阅Beego的官方文档和社区讨论,看看是否有其他开发者遇到并解决了类似问题。

总之,GET请求参数自动转为小写可能是框架为了简化处理而采取的默认策略。在开发过程中,了解并适应这些框架特性可以帮助你更有效地使用它们。

回到顶部