有效 url c# 上的 Webclient 404 协议错误

Webclient 404 protocol error on valid url c#

我有一个 webclient 调用 URL,当我在浏览器中查看它时它工作正常,这让我相信我需要将 headers 添加到我的电话

我已经这样做了,但仍然出现错误。

我确实对同一个 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);
} 

有谁知道为什么我在浏览器中运行良好的调用中仍然收到协议错误?

UploadValue 使用 HTTP POST。你确定这是你想要的吗?如果您在浏览器中查看它,它很可能是 GET,除非您正在填写某种网络表单。

有人可能会猜测您正在尝试做的是获取此响应“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 有一个很好的 table 概述了每个 HTTP 动词的语义,这可能有助于选择合适的 WebClient 方法用于您的用例。