【问题标题】:Keep url encoded while using URI class in .NET 3.5在 .NET 3.5 中使用 URI 类时保持 url 编码
【发布时间】:2013-01-13 08:29:03
【问题描述】:

我正在使用 .NET 3.5。

here 描述的两种解决方案(配置文件中的属性"genericUriParserOptions" 和构造函数参数"dontEscape")都不适用于 .NET 3.5。

我希望URI 构造函数不会逃逸(意味着我想逃逸URL 部分)任何东西。现在我不能使用配置文件了

genericUriParserOptions="DontUnescapePathDotsAndSlashes"

因为此属性仅适用于 .NET 4.0。但我也不能在URI 构造函数中使用"dontEscape" 参数,因为构造函数在.NET 3.5 中已过时并且始终为false

如何在 .NET 3.5 中创建带有转义字符串的 URI

【问题讨论】:

  • Uri.OriginalString 属性对您有帮助吗?基本上,让构造函数做它该做的事,但是你使用你传递给构造函数的原始值。
  • 嗨,吉姆,感谢您的建议。我需要 URI 才能在 C# 中创建 http Web 请求:(HttpWebRequest)WebRequest.Create(myUri)。这就是为什么我不能使用建议的 Uri.OriginalString。我必须找到使用转义字符串创建请求的方法。
  • 有一个重载,WebRequest.Create(string url),它接受一个 URL 字符串。它可能只是创建一个Uri,然后调用WebRequest.Create(Uri),但值得一试。
  • 嗨,吉姆,是的,WebRequest 也会从字符串创建 URI。它具有相同的效果:字符串将被转义。问题在于无法逃避。它是在 URI 中而不是在 WebRequest 中完成的,这就是我询问 URI 的原因。
  • 你试过Uri uri = new Uri(Uri.EscapeUriString(url))吗?

标签: c# .net uri


【解决方案1】:

您应该只对用户名或 URL 中可能无效的其他部分进行编码。对 URL 进行 URL 编码可能会导致问题,因为像这样

string url = HttpUtility.UrlEncode("http://www.google.com/search?q=Example");

会收获

http%3a%2f%2fwww.google.com%2fsearch%3fq%3dExample

这显然不会奏效。相反,您应该只对查询字符串中的键/值对的值进行编码,如下所示:

string url = "http://www.google.com/search?q=" + HttpUtility.UrlEncode("Example");

谢谢。

【讨论】:

    猜你喜欢
    • 2012-06-17
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2012-05-01
    • 2010-10-01
    相关资源
    最近更新 更多