期望在尝试更新推特状态时失败

我似乎无法想出这个。 无论我做什么,我都会收到“417 Expectation failed”错误。 我看过的每个地方都说我需要摆脱HttpWebRequest的Expect标头。 设置静态属性ServicePointManager.Expect100Continue = false或web请求请求中的实例属性request.ServicePoint.Expect100Continue = false永远不会删除标题。 我必须手动将其设置为null才能将其删除。

无论如何,我仍然得到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(); 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())); } 

DotNetOpenAuth不直接设置或支持Except100Continue。 如果Channel类中有属性,那会很好。

在致电’PrepareAuthorizedRequest’之前添加此内容:

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

根据被调用的URL设置Except100Continue。 因此,您可以在创建连接之前设置它。 您甚至可以在配置文件中全局设置它。

       

将期望设置为“期望:没有”..这是我的代码:

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返回XDocument.Load(XmlReader.Create(response.GetResponseReader()));

它对我有用……

LinqToTwitter是一个使用DotNetOpenAuth的Twitter客户端库。 我将看到在未来版本中向DotNetOpenAuth核心库添加消息发布示例。