2014-01-16 60 views
5

期間發送授權頭使用的WebRequest發送POST,授權頭不與請求發送,即使我手動設置頁眉和設置預先驗證爲真,例如:如何強制WebRequest的POST

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

請參閱[this other question](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

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