ASP.NET Core属性路由:如何将person_name映射到personName变量?
How to Map Route Parameter
person_name to Method Variable personName in ASP.NET Core 当然有办法搞定这个两难的问题!你既想保留旧API的路由参数名person_name来让Swagger生成和旧版本一致的文档,又不想违反团队的命名规范用驼峰式的personName作为方法变量,下面给你两个简单直接的解决方案:
方案1:使用[FromRoute]特性显式绑定(推荐单接口场景)
这是最直观且轻量的方式,直接在方法参数上通过[FromRoute]的Name属性指定要绑定的路由参数名称,完美实现路由参数名和方法变量名的映射:
[Route("/api/highfive/{person_name}")] public IActionResult HighFive([FromRoute(Name = "person_name")] string personName) { // 你的业务逻辑代码 }
这样一来,路由里的person_name会准确映射到方法中的personName变量,既满足了Swagger文档的兼容性,又遵守了团队的命名规范,完全不需要妥协任何一方。
方案2:全局配置路由参数绑定约定(推荐多接口场景)
如果你的项目中有大量接口需要这种下划线路由参数转驼峰方法参数的映射,可以在全局配置一个绑定约定,避免每个参数都手动加特性:
在Program.cs(ASP.NET Core 6+)或者Startup.cs(旧版本)中添加以下配置:
builder.Services.AddControllers(options => { options.RouteParameterBindingConventions.Add((routeParamName, paramInfo) => { // 将下划线分隔的路由参数名转换为驼峰式 if (!routeParamName.Contains("_")) return null; var parts = routeParamName.Split('_'); var camelCaseName = parts[0] + string.Concat(parts.Skip(1).Select(part => char.ToUpper(part[0]) + part.Substring(1))); // 如果方法参数名匹配转换后的驼峰名,就绑定对应的路由参数 return paramInfo.Name.Equals(camelCaseName, StringComparison.OrdinalIgnoreCase) ? routeParamName : null; }); });
配置完成后,所有类似{person_name}的路由参数都会自动映射到personName这样的驼峰方法参数,不用再逐个添加[FromRoute]特性,非常适合批量处理的场景。
内容的提问来源于stack exchange,提问作者Kjensen
相关产品推荐
相关产品推荐

