C#在URI中保留分号

时间:2018-08-06 16:08:21

标签: c# decode uribuilder

我需要在URI中保留分号(不要转义)。最终网址看起来像这样:

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

我一直在搞弄UriBuilder,但似乎无法保留分号。

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

string url = "http://dontclick.com";
string product = "CON";
List<string> props = new List<string>{"color", "price", "location"};

var uriBuilder = new UriBuilder(url);
var paramValues = HttpUtility.ParseQueryString(uriBuilder.Query);
paramValues.Add("Product", product);
paramValues.Add("PropertyNames", string.Join(";", props));
uriBuilder.Query = paramValues.ToString();

string finalURL = uriBuilder.Query.ToString();

Console.WriteLine(finalURL);

//OUTPUT:
//http://dontclick.com?Product=CON&PropertyNames=color%3dprice&3dlocation

有人可以帮我保留分号吗?

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

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

不幸的是,我无法控制

1 个答案:

答案 0 :(得分:3)

根据URL specification(CFG在第15/16页上),分号是URL的非法字符,因此将其编码掉。

您尝试使用的服务设计不佳,或者您尝试做一些本不该做的事情。

但是,要回答您的问题:

您可以字符串替换finalURL:

{{1}}

但同样,这里有些闻起来很时髦。你能告诉我们为什么需要这个分号吗?