2016-01-24 130 views
1

我有一个webclient调用到URL当我在浏览器中,这使我相信我会需要在添加页眉到我的电话查看它工作正常Web客户端404协议错误C#

我已经这样做了,但是我仍然遇到了错误。

我有其他调用到做工精细相同的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

我所得到的是404找不到,当我打开详细信息时,它说的是ProtocolError – kingtreelo

+0

使用像wireshark或fiddler这样的嗅探器来比较webclient和您的代码。错误404可能意味着很多不同的事情。为防止黑客进入网站,经常会在发生故障时返回404,并且不会给出确切的故障原因。 – jdweng

回答

0

UploadValue使用HTTP POST。你确定这是你想要的吗?如果你正在浏览器中查看它,它可能是一个GET,除非你正在填写某种形式的网页。

有人可能会猜测你正在尝试做的就是这种回应“http://myserver/api/account/[email protected]

在这种情况下,你只需制定这个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使用您的用例的语义。

+0

谢谢,这是问题所在 – kingtreelo

相关问题