C# 在URI中保留分号

C# 在URI中保留分号,c#,decode,uribuilder,C#,Decode,Uribuilder,我需要在URI中保留分号(不要转义它)。最终url将如下所示: http://dontclick.com?Product=CON&Properties=color;价格;位置 我一直和UriBuilder混在一起,但似乎无法保留分号 它一直将“;”转义为“%3d” stringurl=”http://dontclick.com"; 字符串product=“CON”; 列表道具=新列表{“颜色”、“价格”、“位置”}; var uriBuilder=新的uriBuilder(url); var p

我需要在URI中保留分号(不要转义它)。最终url将如下所示:

http://dontclick.com?Product=CON&Properties=color;价格;位置

我一直和UriBuilder混在一起,但似乎无法保留分号

它一直将“;”转义为“%3d”

stringurl=”http://dontclick.com";
字符串product=“CON”;
列表道具=新列表{“颜色”、“价格”、“位置”};
var uriBuilder=新的uriBuilder(url);
var paramValues=HttpUtility.ParseQueryString(uriBuilder.Query);
参数值。添加(“产品”,产品);
Add(“PropertyNames”,string.Join(“;”,props));
uriBuilder.Query=paramValues.ToString();
字符串finalURL=uriBuilder.Query.ToString();
控制台写入线(最终);
//输出:
//http://dontclick.com?Product=CON&PropertyNames=color%3dprice&3dlocation
谁能帮我保留分号吗

编辑 我有一些关于为什么我需要分号的意见,因为它们是非法字符

答:这是URL所需要的-我无法控制它。我正在查询一个外部站点(我有自己的加密密钥供访问),该站点将根据参数返回一个XML文件。在本例中,它们明确告诉我们使用分号分隔参数。当我使用分号时——它可以工作,如果我让URL将分号编码为%3d——它就不能工作

不幸的是,我无法控制这个

根据(CFG在第15/16页),分号是URL的非法字符,因此它被编码掉了

要么你试图使用的服务设计得很糟糕,要么你试图做一些你确实不应该做的事情

但是,要回答您的问题:

您可以使用字符串替换最终结果:

finalUrl = finalUrl.Replace("%d3", ";");
不过,这里有些东西闻起来很怪。你能告诉我们你为什么需要这个分号吗?

根据(CFG在第15/16页),分号是URL的非法字符,因此它被编码掉了

要么你试图使用的服务设计得很糟糕,要么你试图做一些你确实不应该做的事情

但是,要回答您的问题:

您可以使用字符串替换最终结果:

finalUrl = finalUrl.Replace("%d3", ";");

不过,这里有些东西闻起来很怪。你能告诉我们为什么需要这个分号吗是Url中的保留字符,因此正在对其进行编码。如果您控制
dontclick.com
,则让您的应用程序解码该值。您确定使用编码分号会失败吗?@HansKesting yes。这个系统很旧-开发者们现在正在寻找将这个POS Silverlight应用程序转换成HTML5标准
是Url中的保留字符,因此正在对其进行编码。如果您控制
dontclick.com
,则让您的应用程序解码该值。您确定使用编码分号会失败吗?@HansKesting yes。这个系统很旧-开发人员正在寻找将这个POS Silverlight应用程序转换成HTML5标准,这将是一个比字符串替换更好的选择。我必须查询一个外部系统,该系统将根据查询生成一个XML文件。在它给出的示例中,它需要一个分号来表示单独的属性名称。无论这是否非法,这是我必须处理的,我无法控制它。@Liam不是该代码将
%d3
更改为
的目的在编码之后?这使得
HttpUtillity.UrlEncode
成为一个非常糟糕的选项?这将是一个比字符串替换更好的选择。我必须查询一个外部系统,该系统将根据查询生成一个XML文件。在它给出的示例中,它需要一个分号来表示单独的属性名称。无论这是否非法,这是我必须处理的,我无法控制它。@Liam不是该代码将
%d3
更改为
的目的在编码之后?这使得
HttpUtillity.UrlEncode
成为一个非常糟糕的选项?