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

System.Web.HttpUtility.ParseQueryString的不区分大小写替代方案

不区分大小写的查询字符串解析实现方案

存在可用的替代实现,你可以通过以下两种常用方式满足需求:

方案1:自定义解析逻辑,直接生成不区分大小写的NameValueCollection

NameValueCollection本身支持在构造时传入比较器,你可以自己实现解析逻辑,生成不区分大小写的参数集合:

using System.Collections.Specialized;

public static NameValueCollection ParseQueryStringCaseInsensitive(string queryString)
{
    // 构造时指定不区分大小写的比较器
    var resultColl = new NameValueCollection(StringComparer.OrdinalIgnoreCase);
    
    // 移除查询字符串开头的?标记
    if (queryString.StartsWith("?"))
    {
        queryString = queryString.TrimStart('?');
    }
    
    // 拆分所有参数键值对
    var paramPairs = queryString.Split('&', StringSplitOptions.RemoveEmptyEntries);
    foreach (var pair in paramPairs)
    {
        // 仅拆分第一个=,避免参数值中包含=时解析错误
        var keyValue = pair.Split('=', 2);
        string key = Uri.UnescapeDataString(keyValue[0].Trim());
        string value = keyValue.Length > 1 ? Uri.UnescapeDataString(keyValue[1].Trim()) : string.Empty;
        resultColl.Add(key, value);
    }
    return resultColl;
}

调用方式如下,替换原来的HttpUtility.ParseQueryString调用即可:

if (ApplicationDeployment.IsNetworkDeployed)
{
    string queryString = ApplicationDeployment.CurrentDeployment.ActivationUri.Query;
    var nameValueColl = ParseQueryStringCaseInsensitive(queryString); 
    
    // 此时不同大小写的参数名都可以正常匹配
    if (nameValueColl.AllKeys.Contains("arg1")) 
    {
        // 业务代码可以正常执行
    }         
}

方案2:保留原生解析逻辑,查询时指定不区分大小写的比较规则

如果你不想自己实现解析逻辑,也可以在查询参数时额外指定比较器,无需修改原有解析代码:

if (ApplicationDeployment.IsNetworkDeployed)
{
    string queryString = ApplicationDeployment.CurrentDeployment.ActivationUri.Query;
    var nameValueColl = System.Web.HttpUtility.ParseQueryString(queryString); 
    
    // 查询时传入不区分大小写的比较器
    if (nameValueColl.AllKeys.Contains("arg1", StringComparer.OrdinalIgnoreCase)) 
    {
        // 业务代码可以正常执行
        // 取值时也可以先匹配大小写再兜底,或者封装成扩展方法简化调用
        string arg1Value = nameValueColl["ARG1"] ?? nameValueColl["arg1"];
    }         
}

如果需要频繁读取参数,也可以把原生解析结果转成不区分大小写的字典,使用更便捷:

var paramDict = nameValueColl.AllKeys
    .ToDictionary(k => k, k => nameValueColl[k], StringComparer.OrdinalIgnoreCase);

// 字典自动支持不区分大小写查询
if (paramDict.TryGetValue("arg1", out string arg1Value))
{
    // 业务逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:15:00