2016-01-24 127 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

相關問題