我有一个webclient
来调用URL
,当我在浏览器中查看它时工作正常,这让我相信我需要在我的调用中添加标题
我已经这样做了,但我仍然收到错误。
我确实有其他调用相同的API工作正常,并检查我传递的所有参数是否与预期完全相同(大小写,拼写)
using (var wb = new WebClient())
{
wb.Proxy = proxy;
wb.Headers.Add("Accept-Language", " en-US");
wb.Headers.Add("Accept", " text/html, application/xhtml+xml, */*");
wb.Headers.Add("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)");
byte[] response = wb.UploadValues("http://myserver/api/account/GetUser",
new NameValueCollection()
{
{ "email", register.Email },
});
userDetails = Encoding.UTF8.GetString(response);
}
有没有人知道为什么我仍然会在一个在浏览器中运行良好的调用中出现协议错误?
答案 0 :(得分:0)
UploadValue使用HTTP POST。你确定它是你想要的吗?如果您在浏览器中查看它,则可能是GET,除非您填写某种Web表单。
有人可能会猜测你要做的就是获得这个回应“http://myserver/api/account/GetUser?email=blah@blah.com”
在这种情况下,您只需使用查询参数制定该URL,并使用DownloadString重载之一执行GET。
using (var wb = new WebClient())
{
wb.Proxy = proxy;
userDetails = wb.DownloadString("http://myserver/api/account/GetUser?email=" + register.Email);
}
The Wikipedia article on REST有一个很好的表,概述了每个HTTP谓词的语义,这可能有助于选择适合您的用例的WebClient
方法。