【问题标题】:Help with C# HttpWebRequest URI losing its encoding帮助 C# HttpWebRequest URI 丢失其编码
【发布时间】:2010-02-18 09:53:49
【问题描述】:

HttpWebRequest 解码我的编码 URL 时遇到问题。

var requestUrl = "https://www.google.com/webmasters/tools/feeds/http%3A%2F%2Fwww%2example%2Ecom%2F/crawlissues/";   
var request = (HttpWebRequest)WebRequest.Create(requestUrl);

当查看结束请求 URL 时:

https://www.google.com/webmasters/tools/feeds/http://www.example.com//crawlissues/

这当然会返回 400 Bad 请求。我猜这与URI类而不是HttpWebRequest有关。我该如何阻止这种情况发生?

【问题讨论】:

标签: c# httpwebrequest asp.net-3.5 url-encoding


【解决方案1】:

这是 Uri 类的一个令人讨厌的“安全功能”。如果您使用的是 4.0 或更高版本,您可以turn it off in your configuration file;否则,你必须resort to reflection

【讨论】:

  • 谢谢,理查德!我一直在到处寻找这个——以下工作就像 .net 4.5 中的魅力 跨度>
  • 配置文件也可以在 4.6 上禁用它。
  • @r590:正确。我应该说“4.0 或更高版本”,但当我发布此内容时,这意味着“4.0 或 4.5”。 :)
【解决方案2】:

我认为您不能请求该网址。

它不会在查询参数中解码%2F。因此,如果编码数据在查询参数中,它将起作用:

requestUrl = "https://google.com/tools?feeds=http%3A%2F%2Fwww%2example%2Ecom%2F/crawlissues/";   
var request = (HttpWebRequest)WebRequest.Create(requestUrl);

【讨论】:

    【解决方案3】:

    有一个更简单的方法

    var request=(HttpWebRequest)WebRequest.Create(Uri.EscapeUriString(requestUrl));
    request.Headers.Add("Content-Transfer-Encoding","binary");
    

    对我来说就像一个魅力

    【讨论】:

      【解决方案4】:

      不确定但可能HttpServerUtility.UrlEncode 方法会有所帮助。

      更新。或者您可以使用 WebClient 类。

      【讨论】:

      • 谢谢,但是 url 已经被编码了,问题是有些东西正在解码它。
      【解决方案5】:

      尝试将请求方法从 POST 更改为 GET

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-19
        • 1970-01-01
        • 1970-01-01
        • 2013-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多