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

如何使用HttpUtility获取URL中含&的完整查询字符串?

问题分析与解决方案

你的问题核心在于URL规范中&是参数分隔符,如果参数值本身包含&但未编码,HttpUtility.ParseQueryString会将&后的内容识别为新参数,而非当前参数值的一部分。另外你的代码里有个小错误:new Uri(url.Query)是错误用法,应该通过new Uri(url).Query获取正确的查询字符串部分。

正确处理方式

1. 构造URL时提前编码参数值

如果是你自己构造URL,在将包含&的参数值拼入URL前,必须用HttpUtility.UrlEncode对参数值进行编码,把&转为%26:

// 待编码的参数值(包含&)
string nameValue = "mac&chess";
// 编码参数值
string encodedName = HttpUtility.UrlEncode(nameValue);
// 构造符合规范的URL
string url = $"https://somewhere.go/hello?name={encodedName}&taste=salty";

// 解析查询字符串
var queryParams = HttpUtility.ParseQueryString(new Uri(url).Query);
string getName = queryParams.Get("name");
Console.WriteLine(getName); // 输出: mac&chess

2. 处理已存在的未编码URL(不推荐)

如果是接收外部传入的不符合规范的URL(对方未对参数值里的&编码),只能手动做兼容处理(这种情况不符合URL标准,尽量避免):

string url = "https://somewhere.go/hello?name=mac&chess&taste=salty";
// 手动替换目标参数里的&为编码后的%26
string modifiedUrl = url.Replace("name=mac&chess", "name=mac%26chess");

var queryParams = HttpUtility.ParseQueryString(new Uri(modifiedUrl).Query);
string getName = queryParams.Get("name");
Console.WriteLine(getName); // 输出: mac&chess

为什么UrlPathEncode没用?

UrlPathEncode是针对URL路径部分的编码逻辑,不会处理查询字符串中的参数分隔符&,所以无法解决你的问题,必须使用针对查询参数值的UrlEncode方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:52:56