使用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字符串。
由于
答案 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);