2016-01-24 3 views
1

У меня есть webclient, что вызывает к URL, которая работает хорошо, когда я его просмотра в браузере, который привел меня к мысли, я бы нужно добавить заголовки в свой вызовWebclient Ошибка 404 протокол по уважительной 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

все, что я получаю, это 404 не найден, и когда я открываю детали все, что он говорит, это ProtocolError – kingtreelo

+0

Используйте сниффер, например, проводник или скрипач, чтобы сравнить веб-клиент с вашим кодом. Ошибка 404 может означать много разных вещей. Чтобы предотвратить проникновение хакеров на веб-сайты, часто 404 всегда возвращается, когда происходит сбой, и не дает точной причины отказа. – jdweng

ответ

0

UploadValue использует HTTP POST. Вы уверены, что это то, что вы хотите? Если вы просматриваете его в браузере, это, скорее всего, GET, если вы не заполняете какую-то веб-форму.

Можно предположить, что то, что вы пытаетесь сделать, это получить этот ответ «http://myserver/api/account/[email protected]»

в этом случае вы бы просто сформулировать, что URL с параметрами запроса и выполнить GET, используя один из DownloadString перегрузок.

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