【发布时间】:2010-12-11 21:18:53
【问题描述】:
我需要使用一个接受名为“names[]”的 GET 参数的服务。
例如:GET @987654321@[]=john
当我尝试使用 WebClient 在 C# 中使用它时,括号被编码为 %5B%5D,服务无法理解。当我使用浏览器(未编码)发送上述内容时,一切正常。
这是不起作用的示例:
using (var client = new System.Net.WebClient())
{
response = client.DownloadString(new Uri("http://example.com/name2id?names[]=john"));
}
由 fiddler 监控,请求如下:
GET http://example.com/name2id?names%5B%5D=john HTTP/1.1
Host: example.com
Connection: Keep-Alive
有什么方法可以让框架不对 URL 进行编码,或者通过其他方式解决这个问题?
附:我不控制 API,因此无法更改。
更新:
这有点奇怪。我找到了一个解决方案,将我的 C# 代码更改为:
using (var client = new System.Net.WebClient())
{
response = client.DownloadString(new Uri("http://example.com/name2id?names[]=john", true));
}
注意 Uri 中的布尔值 dontEscape。它实际上已被弃用,但它有效吗?谁能解释一下?
【问题讨论】:
-
我认为唯一的办法是不使用 WebClient 而是使用普通套接字进行手动请求,但即便如此它也不是一个有效的请求,所以我想知道该服务是否会接受的
-
您可以随时要求提供者在其参数中使用合理的名称,当然还要验证他们确实需要名称中的“[]”。这个要求对我来说似乎很荒谬。
-
猜猜它已被弃用,因为它允许您创建无效的 URI。但由于您需要一个无效的 URI,我会忽略该警告。
标签: c# http httpwebrequest request