我正在尝试从需要在 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 标准。我不知道该怎么做。但是……我知道我需要做什么,这很重要!