0

我知道这已经被问过很多次了,但是我已经使用了来自 linqtotwitter 文档和示例的信息以及这里的其他帖子来做到这一点。我可以让我的新应用程序发送推文,但只有让它带我到推特授权页面,我必须单击授权按钮才能继续。

该应用程序本身已获得授权,因此我不需要每次都输入密码,只是使用它需要许可的应用程序。

我知道这样做的原因是因为我的代码中没有我的访问令牌或访问令牌秘密。我已经添加了它们,但每次我得到一个未经授权的 401(无效或过期的令牌)。

我的代码如下,或许你能看出我哪里出错了?

    private IOAuthCredentials credentials = new SessionStateCredentials();

    private MvcAuthorizer auth;
    private TwitterContext twitterCtx;

    public ActionResult Index()
    {

        credentials.ConsumerKey = ConfigurationManager.AppSettings["twitterConsumerKey"];
        credentials.ConsumerSecret = ConfigurationManager.AppSettings["twitterConsumerSecret"];
        credentials.AccessToken = "MYaccessTOKENhere"; // Remove this line and line below and all works fine with manual authorisation every time its called //
        credentials.OAuthToken = "MYaccessTOKENsecretHERE";

        auth = new MvcAuthorizer
        {
            Credentials = credentials
        };

        auth.CompleteAuthorization(Request.Url);

        if (!auth.IsAuthorized)
        {
            Uri specialUri = new Uri(Request.Url.ToString());
            return auth.BeginAuthorization(specialUri);
        }

        twitterCtx = new TwitterContext(auth);
        twitterCtx.UpdateStatus("Test Tweet Here"); // This is the line it fails on //

        return View();
    }
4

1 回答 1

2

这是有助于解决 401 错误的常见问题解答: http: //linqtotwitter.codeplex.com/wikipage ?title=LINQ%20to%20Twitter%20FAQ&referringTitle=Documentation

一些可能也有帮助的项目:

  1. 您不能两次推文相同的文本 - 所以要么删除具有相同文本的上一条推文,要么更改文本。我所有的测试都附加 DateTime.Now.ToString() 以避免这个错误。
  2. SessionStateCredentials 在 SessionState 中保存凭据。Session 状态的默认持久化模式是 InProc,这意味着如果进程回收,您的会话变量将为空,这将不可预测地发生。您可能需要确保您使用的是 StateServer 或 SQL Server 模式。
于 2013-03-04T02:28:31.590 回答