asp.net - Tweetinvi Auth 类的并发使用

标签 asp.net tweetinvi

我们正在 ASP.NET(C# - Framework 4.0)中开发社交媒体监控应用程序,并使用 Twitter 的 Tweetinvi 库。

我们必须同时发送推文并搜索各个 Twitter 用户。为了发布推文,我们必须首先在 Auth 类中设置访问 token 。但是,所有函数都是静态的。如果我们设置任何用户的 token ,所有其他用户都会使用此帐户发布他的推文。

如何避免这个问题?

最佳答案

我是 Tweetinvi 的主要开发人员。

请完整阅读这篇文章,以便您充分理解该主题。

Tweetinvi Auth 类将凭据存储为每个线程静态变量。

这意味着对于应用程序存储其自己的一组凭据的每个线程。在 ASP.NET 中,这意味着 ThreadPool 中的每个线程都将使用自己的一组凭据。

这也意味着每次创建新线程时,最好使用 Auth.SetUserCredentials 手动设置该线程的凭据

要回答您的问题,您有不同的解决方案:

在同一主题中发送推文

每次您想要切换用户时,只需调用 Auth.SetUserCredentials 即可。

// creds for user 1
Auth.SetUserCredentials("CONSUMER_KEY_1", "CONSUMER_SECRET_1", "ACCESS_TOKEN_1", "ACCESS_TOKEN_SECRET_1");
var tweetPublishedByUser1 = Tweet.PublishTweet("user 1 tweet");

// creds for user 2
Auth.SetUserCredentials("CONSUMER_KEY_2", "CONSUMER_SECRET_2", "ACCESS_TOKEN_2", "ACCESS_TOKEN_SECRET_2");
var tweetPublishedByUser2 = Tweet.PublishTweet("user 2 tweet");

创建凭证并用它执行操作

您可以使用 Auth.ExecuteOperationWithCredentials 要求 Tweetinvi 使用一组特定凭据运行任何操作。

// creds for user 1
var cred1 = Auth.CreateCredentials("CONSUMER_KEY_1", "CONSUMER_SECRET_1", "ACCESS_TOKEN_1", "ACCESS_TOKEN_SECRET_1");
var tweetPublishedByUser1 = Auth.ExecuteOperationWithCredentials(cred1, () =>
{
    return Tweet.PublishTweet("user 1 tweet");
});

// creds for user 2
var cred2 = Auth.CreateCredentials("CONSUMER_KEY_2", "CONSUMER_SECRET_2", "ACCESS_TOKEN_2", "ACCESS_TOKEN_SECRET_2");
var tweetPublishedByUser2 = Auth.ExecuteOperationWithCredentials(cred2, () =>
{
    return Tweet.PublishTweet("user 2 tweet");
});

经过身份验证的用户

AuthenticatedUser 通过 ExecuteAuthenticatedUserOperation 方法简化您的生活。该解决方案非常有用,因为它允许您创建 AuthenticatedUser 集合并在需要时使用您想要的集合。

// creds for user 1
Auth.SetUserCredentials("CONSUMER_KEY_1", "CONSUMER_SECRET_1", "ACCESS_TOKEN_1", "ACCESS_TOKEN_SECRET_1");
var authenticatedUser1 = User.GetAuthenticatedUser();

// creds for user 2
Auth.SetUserCredentials("CONSUMER_KEY_2", "CONSUMER_SECRET_2", "ACCESS_TOKEN_2", "ACCESS_TOKEN_SECRET_2");
var authenticatedUser2 = User.GetAuthenticatedUser();


var tweetPublishedByUser1 = authenticatedUser1.ExecuteAuthenticatedUserOperation(() =>
{
    return Tweet.PublishTweet("user 1 tweet");
});

var tweetPublishedByUser2 = authenticatedUser2.ExecuteAuthenticatedUserOperation(() =>
{
    return Tweet.PublishTweet("user 2 tweet");
});

引用文献

您可以在此处找到有关如何在 Tweetinvin 中使用凭据的文档:https://github.com/linvi/tweetinvi/wiki/Credentials

关于asp.net - Tweetinvi Auth 类的并发使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39889850/

相关文章:

asp.net - 如何在 aspx 标记中将 IEnumerable 绑定(bind)到 Repeater?

asp.net - 从 Windbg 中的 ASP.net 3.5 进程转储中检索 session 内容

asp.net - 缩放 azure 网站

TwitterCredentials.SetCredentials 来自 tweetinvi 未找到

asp.net - 如何确定IUSR密码

c# - 将使用数据库部署在 Windows Azure 上的 ASP.NET 网站

c# - 无需每次重新验证即可保存 Tweetinvi 凭据

linux - 将 Tweetinvi 添加到没有 nuget 的单声道

c# - Tweetinvi 不上传大于 15MB 的视频