2016-09-02 3 views
0

내 소비자 키와 소비자 비밀 키를 기반으로 Twitter API에서 토큰을 요청하려고합니다. 그러나 나는 왜 확실하지 않다 The remote server returned an error: (403) Forbidden을 받고있다?C# Twitter 요청 OAuth Token

이 나의 시도는 지금까지

//Get Request Token 
string oauth_consumer_key = "<consumer key>"; 
string oauth_consumer_secret = "<consumer secret>"; 

Uri requestToken = new Uri("https://api.twitter.com/oauth2/token?oauth_consumer_key=" + oauth_consumer_key + "&oauth_consumer_secret=" + oauth_consumer_secret); 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(requestToken); 
req.Method = "POST"; 

try 
{ 
    using (var response = req.GetResponse() as HttpWebResponse) 
    if (req.HaveResponse && response != null) 
    { 

    } 
} 
catch (WebException wex) 
{ 
} 

코드 그러나 나는 항상 Forbidden 예외를 얻을 수가 그것을 통해 불완전 실행입니까? 다음과 같이

가 나는 URL 요청을 게시 할 경우 잘 작동하고 내가 뭔가 잘못하고 있습니까 토큰

https://twitter.com/oauth/request_token?oauth_consumer_key=bidjtABOkF0b3mvw1UaHWDf7x&oauth_consumer_secret=qWO208QapZvckBoyWu3QET8uFnBXXlG3tSTWSS8oAOtoY8qwHD

을 반환?

답변

0

Task/Asyc를 사용하고 인증 OAuth 헤더를 추가하여 문제를 해결했습니다.

public async Task<ActionResult> AccessToken() 
{      
     var httpClient = new HttpClient(); 
     var request = new HttpRequestMessage(HttpMethod.Post, "https://api.twitter.com/oauth2/token"); 

     string oauth_consumer_key = "<consumer key>"; 
     string oauth_consumer_secret = "<consumer secret>"; 

     string url = "https://api.twitter.com/oauth2/token?oauth_consumer_key=" + oauth_consumer_key + "&oauth_consumer_secret=" + oauth_consumer_secret; 

     var customerInfo = Convert.ToBase64String(new UTF8Encoding() 
          .GetBytes(oauth_consumer_key + ":" + oauth_consumer_secret)); 

    // Add authorization to headers 
     request.Headers.Add("Authorization", "Basic " + customerInfo); 
     request.Content = new StringContent("grant_type=client_credentials", Encoding.UTF8, 
                  "application/x-www-form-urlencoded"); 

     HttpResponseMessage response = await httpClient.SendAsync(request); 

     string json = await response.Content.ReadAsStringAsync(); 
     var serializer = new JavaScriptSerializer(); 
     dynamic item = serializer.Deserialize<object>(json); 

     ViewBag.access_token = item["access_token"]; 

     return View();    
    } 
: 여기

토큰 액세스를 얻을 지금 수 내 솔루션입니다