2014-01-16 3 views
5

При использовании WebRequest для отправки POST, заголовок авторизации не отправляется с просьбой, даже если я вручную установить заголовок и установить PreAuthenticate истинно, например:Как заставить WebRequest отправить заголовок авторизации во время процедуры POST

webRequest.Headers["Authorization"] = "OAuth oauth_consumer_key=bFPD..."; 
webRequest.PreAuthenticate = true; 

Использование Fiddler Я вижу, что заголовок авторизации не отправляется. Целевой сайт (Twitter) возвращает 400 (неверный запрос), а не 401 (не авторизованный), поэтому является неправильной задачей, требуемой для отправки WebRequest данных авторизации. Для получения информации возвращенный контент:

{"errors":[{"message":"Bad Authentication data","code":215}]} 

Итак, как мне обойти это? Как заставить WebRequest отправлять авторизацию с первоначальным запросом? Обратите внимание, что данные авторизации не являются базовой аутентификацией, а скорее строкой OAuth.

Благодаря

+0

См. [Этот другой вопрос] (http://stackoverflow.com/questions/2764577/forcing-basic-authentication-in-webrequest). –

ответ

1

Попробуйте это, но не должно быть никакого пространства между заголовками авторизации.

var authHeader = "OAuth oauth_consumer_key=bFPD..."; 
webRequest.Headers.Add("Authorization", authHeader); 
+0

Это не работает (я думаю, что он имеет тот же эффект, что и код выше). Обратите внимание, что заголовок авторизации является правильным (с пробелами), поскольку он работает с GET, но не с POST. – chris

2

Это отвез меня помешанные, но в конце концов нашел ответ в Adding Headers and Post data in RESTfull/HTTP Request in C#.

Решение для меня добавляло заголовок авторизации ПЕРЕД записью потока запросов.

Надеюсь, это поможет.

+0

Не могу поверить! Вы правы ... все сложные ответы, и это РЕАЛЬНЫЙ ответ! Спасибо человеку .. – CodeHacker

9

Вот мое решение. Значение находится в переменной json.

var myUri = new Uri(fullpath); 
var myWebRequest = WebRequest.Create(myUri); 
var myHttpWebRequest = (HttpWebRequest)myWebRequest; 
myHttpWebRequest.PreAuthenticate = true; 
myHttpWebRequest.Headers.Add("Authorization", "Bearer " + AccessToken); 
myHttpWebRequest.Accept = "application/json"; 

var myWebResponse = myWebRequest.GetResponse(); 
var responseStream = myWebResponse.GetResponseStream(); 
if (responseStream == null) return null; 

var myStreamReader = new StreamReader(responseStream, Encoding.Default); 
var json = myStreamReader.ReadToEnd(); 

responseStream.Close(); 
myWebResponse.Close(); 
+0

Что такое myuri в вашем коде .... –

+0

myUri создан на предыдущей строке. Просто отправьте полный веб-адрес. – JuanPablo

+0

Мне не хватало строку 'myHttpWebRequest.PreAuthenticate = true;'. Спасибо, кажется, не работает без него, даже если мы добавим заголовок auth – FindOutIslamNow

Смежные вопросы