我需要向包含未转义的“ |”的地址发送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/

10-10 07:36