2016-04-08 9 views
0

Tweet'leri yüklemeye çalışıyorum ancak MVC uygulamamı kullanırken kodum çalışmıyor. Ancak, tam kod bir konsol kullanırken çalışır.MVC'de Tweetler Alma

"Async" ile ilgili bir şey olduğunu düşünürken, bunu daha önce kullanma deneyimim olmadı ve bir çözüm bulamıyorum. Benim "Heyecan" sınıfta

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(); 
    } 

: Benim Denetleyicilere olarak

vurmak değildir ") (GetAccessToken" sonra puan kırın

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"]; 
    } 
+0

@eh. bu işe yarıyor! Şerefe dostum, büyük yardım! – Chris

+0

@eh'ye doğru bir şekilde teşekkür etmek için lütfen Cevap ve vokum oku yanındaki onay işaretini tıklayın :-) –

cevap

2

böyle .Result kullanmayın - Eğer' yeniden kilitlenme. Bunun yerine await kullanın ve Tweets yöntemini kullanın ve async yapın. async'u kullanmak için temel "altın kural", onu kullandığınızda, zinciri sonuna kadar kullanırsınız.

Daha fazla okuma için benzer örneklerle birlikte bir blog post.