2012-11-15 1 views
2

oauth를 사용하여 클라이언트 응용 프로그램에서 access_token을 가져 오는 동안 문제가 발생했습니다. API에서 응답이 비어 있지 않음을 알 수 있지만 반환 된 응답의 본문이 비어 있습니다.oauth/토큰이 빈 본문을 반환합니다.

tokenresponse = { 
    "access_token":"[ACCESSTOKENVALUE]", 
    "token_type":"bearer", 
    "expires_in":"1200", 
    "refresh_token":"[REFRESHTOKENVALUE]", 
    "scope":"[SCOPEVALUE]" 
} 

토큰 http://api.sample.com/OAuth/Token를 반환 API에서 방법 : 토큰이 요청

public ActionResult Token() 
{ 
    OutgoingWebResponse response = 
    this.AuthorizationServer.HandleTokenRequest(this.Request); 
    string tokenresponse = string.Format("Token({0})", response!=null?response.Body:"")); 
    return response.AsActionResult(); 
} 

클라이언트 방법 :

 public string GetAuthorizationToken(string code) 
     { 
      string Url = ServerPath + "OAuth/Token"; 
      string redirect_uri_encode = UrlEncode(ClientPath); 
      string param = string.Format("code={0}&client_id={1}&client_secret={2}&redirect_uri={3}&grant_type=authorization_code",code, ClientId, ClientSecret, redirect_uri_encode); 

      HttpWebRequest request = HttpWebRequest.Create(Url) as HttpWebRequest; 
      string result = null; 
      request.Method = "POST"; 
      request.KeepAlive = true; 
      request.ContentType = "application/x-www-form-urlencoded"; 
      request.Timeout = 10000; 
      request.Headers.Remove(HttpRequestHeader.Cookie); 
      var bs = Encoding.UTF8.GetBytes(param); 
      using (Stream reqStream = request.GetRequestStream()) 
      { 
       reqStream.Write(bs, 0, bs.Length); 
      } 

      using (WebResponse response = request.GetResponse()) 
      { 
       var sr = new StreamReader(response.GetResponseStream()); 
       result = sr.ReadToEnd(); 
       sr.Close(); 
      } 
      if (!string.IsNullOrEmpty(result)) 
      { 
       TokenData tokendata = JsonConvert.DeserializeObject<TokenData>(result); 
       return UpdateAuthorizotionFromToken(tokendata); 
      } 
      return null; 
     } 

결과 변수가 비어 있습니다. 이 문제를 일으킬 수있는 정보가 있으면 알려 주시기 바랍니다. 처음에는 쿠키 때문에 쿠키를 삭제하려고 시도 했었습니다. 미리 감사드립니다.

답변

0

다음 코드를 사용하여 webclient를 작성하면 tokeninfo.json에 json 정보가 표시되고 간단하게 작동합니다.

 WebClient client = new WebClient(); 
     string postData = "client_id=" + "" 
         + "&client_secret=" + "" 
         + "&grant_type=password&username=" + "" //your username 
         + "&password=" + "";//your password :) 
     string soundCloudTokenRes = "https://api.soundcloud.com/oauth2/token"; 
     string tokenInfo = client.UploadString(soundCloudTokenRes, postData); 

tokeninfo의 토큰 만 포함하는 하위 문자열을 사용할 수 있습니다. 사운드 클라우드에 트랙을 업로드하려면.

개인 무효 TestSoundCloudupload() {

 System.Net.ServicePointManager.Expect100Continue = false; 
     var request = WebRequest.Create("https://api.soundcloud.com/tracks") as HttpWebRequest; 
     //some default headers 
     request.Accept = "*/*"; 
     request.Headers.Add("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.3"); 
     request.Headers.Add("Accept-Encoding", "gzip,deflate,sdch"); 
     request.Headers.Add("Accept-Language", "en-US,en;q=0.8,ru;q=0.6"); 

     //file array 
     var files = new UploadFile[] { new UploadFile(Server.MapPath("Downloads//0.mp3"), "track[asset_data]", "application/octet-stream") }; 
     //other form data 
     var form = new NameValueCollection(); 
     form.Add("track[title]", "Some title"); 
     form.Add("track[sharing]", "public"); 
     form.Add("oauth_token", ""); 
     form.Add("format", "json"); 

     form.Add("Filename", "0.mp3"); 
     form.Add("Upload", "Submit Query"); 
     try 
     { 
      using (var response = HttpUploadHelper.Upload(request, files, form)) 
      { 
       using (var reader = new StreamReader(response.GetResponseStream())) 
       { 
        Response.Write(reader.ReadToEnd()); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      Response.Write(ex.ToString()); 
     } 
    }