【发布时间】:2010-11-14 06:34:46
【问题描述】:
我似乎无法弄清楚这一点。无论我做什么,我都会不断收到“417 期望失败”错误。我看过的所有地方都说我需要摆脱 HttpWebRequest 的 Expect 标头。在 Web 请求 request.ServicePoint.Expect100Continue = false 上设置静态属性 ServicePointManager.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<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()));
}
【问题讨论】:
-
标题是什么样的? 417 是对 Expect: 标头的特定反应,因此,如果您确定您没有发送任何这些,那真的很奇怪。
-
就在调用 GetResponse() 之前,“Expect”属性为空,并且标头集合不包含“Expect”标头。我将不得不与提琴手核对,看看它是否仍以某种方式被放入其中。我仍然无法解释为什么对“Expect100Continue = false”的调用都不起作用
-
DotNetOpenAuth 内置了 417 错误处理,因此您的应用甚至不必处理这种情况或将 Expect100Continue 设置为 false。您可以打开日志记录以便我们查看是否发生这种情况吗? dotnetopenauth.net:8000/wiki/CodeSnippets/Logging
-
我可能还冒昧地建议,LinqToTwitter 附带的用于 DotNetOpenAuth 的示例本身没有这个问题。你能说出你在做什么不同的事情吗?
-
@andrew-arnott 是的,我会打开登录并回复您。我没有得到直接的 417 异常,它被包装在 DotNetOpenId 异常中(不确定框架抛出的实际异常是什么,但 417 异常是内部异常)。我对 LinqToTwitter 一无所知,并且会猜测我没有使用它。我从示例中的 ApplicationBlock 复制了 Twitter 代码,并尝试对其进行扩展以支持更新。
标签: c# .net twitter oauth dotnetopenauth