如何强制WebRequest在POST期间发送授权标头

时间:2014-01-16 09:47:18

标签: .net http twitter webrequest

使用WebRequest发送POST时,即使我手动设置了标头并将PreAuthenticate设置为true,也不会随请求一起发送Authorization标头,例如:

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

使用Fiddler我可以看到没有发送Authorization标头。目标站点(Twitter)返回400(错误请求)而不是401(未授权),因此WebRequest发送授权数据所需的错误挑战。有关信息,返回的内容为:

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

那么,我该如何解决这个问题呢?如何强制WebRequest在初始请求时发送授权?请注意,授权数据不是基本身份验证,而是OAuth字符串。

由于

3 个答案:

答案 0 :(得分:27)

这是我的解决方案。该值在变量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();

答案 1 :(得分:5)

这让我疯狂,但最终在Adding Headers and Post data in RESTfull/HTTP Request in C#找到答案。

我的解决方案是在编写请求流之前添加授权标题。

希望这有帮助。

答案 2 :(得分:1)

试试这个,但授权标题之间不应有空格。

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