【问题标题】:Stop C# Uri constructor from encoding the url (vertical bar)停止 C# Uri 构造函数对 url 进行编码(竖线)
【发布时间】:2016-02-14 15:46:28
【问题描述】:

我需要向包含未转义“|”的地址发送 GET 请求(竖线)。服务器(不是我的)不会接受带有转义 | 的查询。 (即 %7C)

但是,每当我从地址构造一个新的 Uri 时,我可以看到 absoluteUri 包含我的地址的转义版本 (%7C)。

有没有办法在 C# 中使用未转义的 | 发送 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。

谢谢!

【问题讨论】:

  • 它是否会影响功能,因为我认为它不应该......
  • 另外,我认为这个角色叫管道
  • “但是,每当我从地址构造一个新的 Uri”.. 你能限定这个语句吗?.. 你是指在这里使用 Uri .Net 类型吗?你能提供一个代码 sn-p 你尝试用 GET 方法发送请求吗?
  • 我编辑了帖子感谢您的帮助!
  • 我见过很多字符管道 vbar 的名字哈哈

标签: c# .net url get uri


【解决方案1】:

我无法找到一种方法来规避恼人的 Uri 解析我的管道字符。 所以我使用的方法是使用Socket发送一个GET请求,因为这个过程不会涉及任何Uri:0)

至少现在服务器正在识别我的请求并提供我想要的信息。

【讨论】:

    【解决方案2】:

    WebRequest.Create 方法有一个接受字符串的重载。所以你可以这样做:

    var req = WebRequest.Create(temp.AbsoluteUrl.Replace("%7C", "|");
    

    这确实有一个潜在的问题:如果由于某种原因您的 url 已经可以合法地包含 %7C,它也将被替换。如果这是个问题,下面的方法会比较笨拙但有效(如果需要,请将 --PIPE-- 替换为其他任何内容):

    var tempFormUrl = formUrl.Replace("|","--PIPE--");
    var temp = new Uri(tempFormUrl);
    var req = WebRequest.Create(temp.AbsoluteUrl.Replace("--PIPE--", "|");
    

    【讨论】:

    • 这就像我原来的方法。但是传递给 WebRequest.Create 的字符串实际上是被构造到 Uri 类中的,所以问题仍然存在:/无论如何感谢您的帮助:)
    猜你喜欢
    • 2022-12-14
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多