2009-07-27 115 views
0

我似乎無法弄清楚這一點。無論我做什麼,我都會收到「417期望失敗」錯誤。我看過的每個地方都說我需要擺脫HttpWebRequest的Expect頭文件。設置靜態屬性ServicePointManager.Expect100Continue = false或web請求request.ServicePoint.Expect100Continue = false上的實例屬性永遠不會擺脫標題。我必須手動將其設置爲空以將其刪除。期望嘗試更新twitter狀態時失敗

無論如何,我仍然得到417錯誤。我錯過了什麼?

private static readonly MessageReceivingEndpoint UpdateStatusEndpoint 
     = new MessageReceivingEndpoint("http://twitter.com/statuses/update.xml", HttpDeliveryMethods.PostRequest); 

public static XDocument UpdateStatus(ConsumerBase twitter, string accessToken, string message) 
{ 
    var data = new Dictionary<string, string>(); 
    data.Add("status", message); 
    ServicePointManager.Expect100Continue = false; //Doesn't work 
    HttpWebRequest request = twitter.PrepareAuthorizedRequest(UpdateStatusEndpoint, accessToken, data); 

    request.ServicePoint.Expect100Continue = false; //setting here doesn't work either 

    //request.Expect is still set at this point unless I explicitly set it to null. 

    request.Expect = null; 
    var response = twitter.Channel.WebRequestHandler.GetResponse(request); //Throws exception 
    return XDocument.Load(XmlReader.Create(response.GetResponseReader())); 
} 
+0

標題是什麼樣的? 417對Expect:header是一個特殊的反應,所以如果你確定你沒有發送這些,那真是太奇怪了。 – balpha 2009-07-27 06:41:07

+0

在調用GetResponse()之前,「Expect」屬性爲null,並且標頭集合不包含「Expect」標頭。我將不得不與提琴手檢查,看看它是否仍然在那裏。我仍然無法解釋爲什麼既不呼叫「Expect100Continue = false」正在工作 – Micah 2009-07-27 13:29:16

回答

3

DotNetOpenAuth不設置或直接支持Except100Continue。如果Channel類中有一個屬性會很好。

您的來電 'PrepareAuthorizedRequest' 前補充一點:

((HttpWebRequest)WebRequest.Create 
(UpdateStatusEndpoint.Location)).ServicePoint.Expect100Continue = false; 

Except100Continue取決於稱爲URL設置。所以你可以在連接創建之前設置它。你甚至可以在配置文件中全局設置它。

<system.net> 
    <settings> 
     <servicePointManager expect100Continue="false" /> 
    </settings> 
    </system.net> 
0

LinqToTwitter是一個使用DotNetOpenAuth的Twitter客戶端庫。我將看到有關爲未來版本添加消息發佈示例到DotNetOpenAuth核心庫的信息。

1

將前景展望 「預計:沒有什麼」 ..this是我的代碼:

var data = new Dictionary();

data.Add("status", status);

HttpWebRequest request = twitter.PrepareAuthorizedRequest(UpdateStatusEndpoint, accessToken, data);

request.Expect = "expect:nothing";

var response = twitter.Channel.WebRequestHandler.GetResponse(request); exception return XDocument.Load(XmlReader.Create(response.GetResponseReader()));

它的工作對我來說...