【发布时间】:2014-08-12 18:36:38
【问题描述】:
我正在尝试从需要在 url 请求中使用方括号的网址执行 http GET - 类似于:
string requestconstructor = "http://address:port/datalink?test.a[somestuff]"
System.Net.WebClient webClient = new System.Net.WebClient();
string result = webClient.DownloadString(requestconstructor);
我尝试将 webclient 编码设置为 utf8 和 ascii,并尝试将字符串声明中的方括号分别替换为 \u00b5 和 \u00b6 以直接对其进行编码,但这些方法都没有发送有效的字符串到服务器。我尝试在 downloadstring 调用中的 requestconstructor 前面放置一个 @ 符号...
我可以将引号中的内容准确复制并粘贴到网络浏览器中,并且效果很好。我可以使用我必须的代码向不需要方括号的服务器功能发出请求,这也可以。
有没有办法使用这些字符发出请求?
谢谢!
更新: 我尝试了建议的代码,包括手动包含转义码和使用 Uri.EscapeDataString ,但它仍然失败。每次失败,服务器返回代码 500,如果您在网络浏览器的 url 栏中输入错误的请求,返回的代码与返回的代码相同。
我认为问题在于服务器希望这些字符不会被转义,并且即使在我开始尝试在您的帮助下手动执行此操作之前,webclient 可能已经自动转换它们?有没有办法让 webclient 在不编码的情况下完全按原样发送字符串?或者是否有 .encoding 属性的设置可以将 [ 和 ] 作为平面文本而不是特殊字符代码传输?这就是我在最初的努力中试图用 @ 做的事情。
更新 2 - 我加载了 Fiddler 来分析请求......而且我的诊断是正确的......当我将 url 键入 chrome fiddler 时,它显示它包括“[stuff]”。当我通过 c# 加载相同的地址时,它会显示为“%5Bstuff%5D”。所以我必须说服 c# 以我输入的方式发送 url 请求,而不是试图提供帮助并使其符合 web 标准。我不知道该怎么做。但是……我知道我需要做什么,这很重要!
【问题讨论】:
-
根据您的更新,我认为您需要更新网络服务。
-
当它应该被转义时,服务器如何期望原始
[?这可以被视为预期的行为吗?有可能吗? -
如我尝试连接的服务器?这不是我构建的......虽然源代码可用......我认为改变整个 api 超出了我的范围......
-
如果服务器期待一个转义字符,那么在已经转义的网络浏览器中输入请求也应该可以,对吧? %5Btrue%5D 会起作用吗?就像将带有特殊字符的 google 链接粘贴到浏览器中一样,会将您带到正确的位置?因为我尝试将请求粘贴到 Web 浏览器中,用转义码代替括号并得到相同的代码 500 错误。
标签: c# downloadstring