【问题标题】:Getting Tweets in MVC在 MVC 中获取推文
【发布时间】:2016-07-30 02:37:37
【问题描述】:

我正在尝试加载推文,但在使用我的 MVC 应用程序时我的代码无法正常工作。但是,确切的代码在使用控制台时有效。

我假设它与“异步”有关,我之前没有使用过它的经验,我无法找到解决方案。 “GetAccessToken()”之后的断点没有命中

在我的控制器中:

    public ActionResult Tweets(int tweets, string username)
    {
        var twitter = new Twitter();

        var userTweets = twitter.GetTweets("chrishall9521", 10).Result.ToList();

        this.ViewBag.Tweets = userTweets;

        return View();
    }

在我的“Twitter”课程中:

    public async Task<IEnumerable<string>> GetTweets(string userName, int count)
    {
        var accessToken = await GetAccessToken();
        var requestUserTimeline = new HttpRequestMessage(HttpMethod.Get, string.Format("https://api.twitter.com/1.1/statuses/user_timeline.json?count={0}&screen_name={1}&trim_user=1&exclude_replies=1", count, userName));
        requestUserTimeline.Headers.Add("Authorization", "Bearer " + accessToken);
        var httpClient = new HttpClient();
        HttpResponseMessage responseUserTimeLine = await httpClient.SendAsync(requestUserTimeline);
        var serializer = new JavaScriptSerializer();
        dynamic json = serializer.Deserialize<object>(await responseUserTimeLine.Content.ReadAsStringAsync());
        var enumerableTwitts = (json as IEnumerable<dynamic>);

        if (enumerableTwitts == null)
        {
            return null;
        }

        return enumerableTwitts.Select(t => (string)(t["text"].ToString()));
    }

    public async Task<string> GetAccessToken()
    {
        var httpClient = new HttpClient();
        var request = new HttpRequestMessage(HttpMethod.Post, "https://api.twitter.com/oauth2/token ");
        var customerInfo = Convert.ToBase64String(new UTF8Encoding().GetBytes(OAuthConsumerKey + ":" + OAuthConsumerSecret));
        request.Headers.Add("Authorization", "Basic " + customerInfo);
        request.Content = new StringContent("grant_type=client_credentials", Encoding.UTF8, "application/x-www-form-urlencoded");

        var response = await httpClient.SendAsync(request).ConfigureAwait(false);

        string json = await response.Content.ReadAsStringAsync();
        var serializer = new JavaScriptSerializer();
        dynamic item = serializer.Deserialize<object>(json);
        return item["access_token"];
    }

【问题讨论】:

  • @eh。这样可行!干杯伙伴,巨大的帮助!
  • 为了正确感谢@eh,请点击Answer 旁边的复选标记和upvote 箭头,以及:-)

标签: c# asp.net-mvc twitter


【解决方案1】:

不要像那样使用.Result - 你会陷入僵局。在Tweets 方法中改用await 并将其设为async。使用async 的基本“黄金法则”是,当你使用它时,你会一直使用它。

这里有一个blog post,有类似的例子供进一步阅读。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-13
    • 2015-08-27
    • 2017-04-11
    • 2021-12-13
    • 2015-11-20
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多