为什么TweetSharp会抛出异常?

3

这是最基本的例子,但它会抛出一个异常。

// Pass your credentials to the service
TwitterService service = new TwitterService(API_KEY,API_SECRET);
service.UserAgent = "StackBot";

// Step 1 - Retrieve an OAuth Request Token
OAuthRequestToken request = service.GetRequestToken();

// Step 2 - Redirect to the OAuth Authorization URL
Uri uri = service.GetAuthorizationUri(request);
Console.WriteLine(uri.ToString());

// Step 3 - Exchange the Request Token for an Access Token
string verifier = "123456"; // <-- This is input into your application by your user
OAuthRequestToken requestToken = new OAuthRequestToken();
OAuthAccessToken access = service.GetAccessToken(requestToken, verifier);

以下是异常信息:

未处理的异常: System.ArgumentNullException: 参数不能为空。
参数名: query
  at System.Compat.Web.HttpUtility.ParseQueryString (System.String query, System.Text.Encoding encoding) [0x00000] in :0 
  at System.Compat.Web.HttpUtility.ParseQueryString (System.String query) [0x00000] in :0 
  at TweetSharp.TwitterService.GetRequestToken (System.String callback) [0x00000] in :0 
  at TweetSharp.TwitterService.GetRequestToken () [0x00000] in :0 
  at Namespace.Class.Main (System.String[] args) [0x00049] in Main.cs:179

注意:我在Ubuntu 10.10 64位上使用的是Mono 2.6。

2个回答

1
首先,您正在创建一个新的“requestToken”变量,一个空的变量,具有空值,然后尝试使用它来获取访问令牌。您需要使用实际从GetRequestToken调用中收到的那个(您称之为“request”的那个)。

1
嗯,我应该再清楚一些,但错误出现在第一个调用处: OAuthRequestToken request = service.GetRequestToken(); - Nathan Osman
你能提供 TweetSharp 的 TRACE 结果吗?我无法复制这个问题,但我也没有使用 Ubuntu。看起来响应内容为 null,这可能与 Mono 如何处理 NetworkStream 有关。 - Daniel Crenna

0

我也遇到了同样的问题,但我自己无法重现它,但是服务器端有些客户端会周期性地出现此问题。堆栈跟踪和错误描述与您所获取的类似:

InnerException: 值不能为 null。参数名: query
at System.Compat.Web.HttpUtility.ParseQueryString(String query, Encoding encoding)
at System.Compat.Web.HttpUtility.ParseQueryString(String query)
at TweetSharp.TwitterService.GetRequestToken(String callback)

我查看了TweetSharp代码,它可能有点过时(v. 2.3)。如果问题在更新的版本中得到解决,请告诉我。似乎错误发生在这里:

    var response = _oauth.Request(request);
    SetResponse(response);
    var query = HttpUtility.ParseQueryString(response.Content);

看起来由于某种原因向 Twitter 服务器的请求失败了,但没有检查响应内容是否为空。然后 ParseQueryString 抛出异常。

我的解决方案是忽略此错误并允许用户重试。似乎网络错误、代理服务器或不稳定的连接可能会导致此错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接