C# 在 URI 中保留分号
C# Keep Semicolon in URI
我需要在 URI 中保留分号(不要转义)。最后的 url 看起来像这样:
http://dontclick.com?Product=CON&Properties=color;price;location
我一直在摆弄 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的要求——我无法控制它。我正在查询一个外部站点(我有自己的加密访问密钥),它将 return 一个基于参数的 XML 文件。在示例中,他们明确告诉我们使用分号分隔参数。当我使用分号时 - 它有效,如果我让 URL 将分号编码为 %3d - 它不起作用。
不幸的是我无法控制这个
根据 URL specification(CFG 在第 15/16 页),分号对于 URL 是非法字符,因此它被编码掉了。
要么您尝试使用的服务设计不当,要么您试图做一些您不应该做的事情。
但是,要回答你的问题:
你可以用字符串替换最后的URL:
finalUrl = finalUrl.Replace("%d3", ";");
不过,这里还是有些怪味。你能告诉我们你为什么需要这个分号吗?
我需要在 URI 中保留分号(不要转义)。最后的 url 看起来像这样:
http://dontclick.com?Product=CON&Properties=color;price;location
我一直在摆弄 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的要求——我无法控制它。我正在查询一个外部站点(我有自己的加密访问密钥),它将 return 一个基于参数的 XML 文件。在示例中,他们明确告诉我们使用分号分隔参数。当我使用分号时 - 它有效,如果我让 URL 将分号编码为 %3d - 它不起作用。
不幸的是我无法控制这个
根据 URL specification(CFG 在第 15/16 页),分号对于 URL 是非法字符,因此它被编码掉了。
要么您尝试使用的服务设计不当,要么您试图做一些您不应该做的事情。
但是,要回答你的问题:
你可以用字符串替换最后的URL:
finalUrl = finalUrl.Replace("%d3", ";");
不过,这里还是有些怪味。你能告诉我们你为什么需要这个分号吗?