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

chr*_*ris 17 .net twitter http webrequest

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

webRequest.Headers["Authorization"] = "OAuth oauth_consumer_key=bFPD...";
webRequest.PreAuthenticate = true;
Run Code Online (Sandbox Code Playgroud)

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

{"errors":[{"message":"Bad Authentication data","code":215}]}
Run Code Online (Sandbox Code Playgroud)

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

谢谢

小智 31

这是我的解决方案.该值在变量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();
Run Code Online (Sandbox Code Playgroud)


小智 7

这让我疯狂,但最终在C#中的RESTfull/HTTP请求中添加标题和发布数据的答案.

对我来说,解决方案是在编写请求流之前添加授权标头.

希望这可以帮助.


小智 3

尝试此操作,但授权标头之间不应有空格。

var authHeader = "OAuth  oauth_consumer_key=bFPD...";
webRequest.Headers.Add("Authorization", authHeader);
Run Code Online (Sandbox Code Playgroud)