You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core中间器重写查询字符串:短横线键转驼峰

ASP.NET Core 无重定向重写:将短横线查询键转为驼峰命名

需求很明确:把请求里的短横线命名(kebab-case)查询参数键,转换成驼峰命名(camelCase),而且不能重定向用户,只需要在请求管道内部修改上下文。

你现在的代码已经走对了第一步——拿到查询集合并转换了键名,但问题出在不知道怎么正确构建新的查询串并替换到请求里。直接给你修正后的完整代码:

app.Use(async (context, next) =>
{
    // 初始化QueryBuilder用来构建新的查询键值对
    var queryBuilder = new QueryBuilder();

    foreach (var item in context.Request.Query)
    {
        // 将短横线命名的键转为驼峰(这里假设你用的Humanizer库的Underscore+Camelize方法)
        var camelizedKey = item.Key.Underscore().Camelize();
        // 把转换后的键和原值添加到builder中,支持多值参数
        foreach (var value in item.Value)
        {
            queryBuilder.Add(camelizedKey, value);
        }
    }

    // 替换请求的QueryString为新构建的查询串
    context.Request.QueryString = queryBuilder.ToQueryString();

    // 继续执行后续管道
    await next.Invoke();
});

关键点说明:

  • 不要用List<QueryString>,QueryString代表整个查询串,单个键值对应该用QueryBuilder来管理,它会自动处理URL编码和参数拼接,避免手动拼接的错误。
  • 处理多值参数:比如如果有key-one=val1&key-one=val2这种情况,遍历item.Value把所有值都加进去,保证参数不丢失。
  • 替换QueryString后,context.Request.Query会自动同步更新,后续的控制器、中间件拿到的就是驼峰命名的参数了。

关于驼峰转换的依赖:

你代码里用的Underscore().Camelize()是Humanizer库的方法,如果还没装这个包,需要通过NuGet安装:

Install-Package Humanizer

或者如果你不想用第三方库,也可以自己实现一个短横线转驼峰的方法,比如:

private string KebabToCamelCase(string kebabStr)
{
    if (string.IsNullOrEmpty(kebabStr)) return kebabStr;
    
    var parts = kebabStr.Split('-');
    return parts[0].ToLower() + string.Concat(parts.Skip(1).Select(p => char.ToUpper(p[0]) + p.Substring(1).ToLower()));
}

这样修改后,当请求https://example.com/path?key-one=value&key-two=value2进来时,后续的代码拿到的查询参数就是keyOne=value和keyTwo=value2了,完全不需要重定向,只是在请求管道内部做了上下文修改。

内容的提问来源于stack exchange,提问作者Hasan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 22:57:46