我需要使用HttpWebRequest
类来发布数据。我的目标uri看起来像http://www.foo.com/index.jsp?value=http://www.foo.com
。在Urlencode之后,它变为http://www.foo.com/index.jsp?value=http%3A%2F%2Fwww.foo.com
。但是当我使用
WebRequest.Create(@"http://www.foo.com/index.jsp?value=http%3A%2F%2Fwww.foo.com") as HttpWebRequest;
它实际上发送http://www.foo.com/index.jsp?value=http:%2F%2Fwww.foo.com
(它将%3A
转换回冒号),然后出错了。那么我该如何发送http://www.foo.com/index.jsp?value=http%3A%2F%2Fwww.foo.com
而不是http://www.foo.com/index.jsp?value=http:%2F%2Fwww.foo.com
?
更新: 示例代码:
const string queryParam = @"http://www.foo.com";
UriBuilder bulider = new UriBuilder
{
Scheme = "http",
Host = @"www.foo.com",
Path = "index.jsp",
Query = HttpUtility.UrlEncode(queryParam)
};
Uri uri = bulider.Uri;
Console.WriteLine(uri.ToString());
输出结果:
http://www.foo.com/index.jsp?http:%2f%2fwww.foo.com
更新
不同的.NET版本有不同的行为。在.NET 4.5.2中,输出为http://www.foo.com/index.jsp?http:%2f%2fwww.foo.com
,在.NET 4.0中,输出为http://www.foo.com/index.jsp?http://www.foo.com
。