我需要向包含未转义的“ |”的地址发送GET请求(竖线)。服务器(不是我的服务器)将不接受转义的查询。 (即%7C)
但是,无论何时从该地址构造一个新的Uri,我都可以看到absoluteUri
包含我的地址(%7C)的转义版本。
有没有一种方法可以在C#中使用未转义的| GET发送GET请求?
(使用.NET 4.5)
任何帮助,将不胜感激!谢谢。
编辑:
string formUrl = "http://example.com/|12|"; //just an example
Uri temp = new Uri(formUrl);
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(temp);
req.ContentType = "application/x-www-form-urlencoded";
req.CookieContainer = cookies;
req.Method = "GET";
req.KeepAlive = true;
req.KeepAlive = true;
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
List<string> gethtml = new List<string>();
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
while (!sr.EndOfStream)
gethtml.Add(sr.ReadLine());
}
resp.Dispose();
如果我看temp.AbsoluteUri,则竖线/竖线字符被编码为%7C。
谢谢!
最佳答案
WebRequest.Create
方法具有带字符串的重载。因此,您可以这样做:
var req = WebRequest.Create(temp.AbsoluteUrl.Replace("%7C", "|");
但是,这确实存在一个潜在的问题:如果由于某种原因您的网址可以合法地包含
%7C
,那么它也会被替换。如果这是一个问题,则以下方法比较笨拙,但可行(如果需要,可以将--PIPE--
替换为其他任何内容):var tempFormUrl = formUrl.Replace("|","--PIPE--");
var temp = new Uri(tempFormUrl);
var req = WebRequest.Create(temp.AbsoluteUrl.Replace("--PIPE--", "|");
关于c# - 停止C#Uri构造函数对URL进行编码(竖线),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33686349/