C# oauth/token返回空正文
我在使用oauth获取客户端应用程序中的访问令牌时遇到问题。 返回的响应主体为空,但在API中我可以看到响应不是空的C# oauth/token返回空正文,c#,oauth,dotnetopenauth,access-token,C#,Oauth,Dotnetopenauth,Access Token,我在使用oauth获取客户端应用程序中的访问令牌时遇到问题。 返回的响应主体为空,但在API中我可以看到响应不是空的 tokenresponse = { "access_token":"[ACCESSTOKENVALUE]", "token_type":"bearer", "expires_in":"1200", "refresh_token":"[REFRESHTOKENVALUE]", "scope":"[SCOPEVALUE]" } API中返回令牌的方
tokenresponse = {
"access_token":"[ACCESSTOKENVALUE]",
"token_type":"bearer",
"expires_in":"1200",
"refresh_token":"[REFRESHTOKENVALUE]",
"scope":"[SCOPEVALUE]"
}
API中返回令牌的方法:
请求令牌的客户端方法是:
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;
}
公共字符串GetAuthorizationToken(字符串代码)
{
字符串Url=ServerPath+“OAuth/Token”;
字符串重定向_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)为HttpWebRequest;
字符串结果=null;
request.Method=“POST”;
request.KeepAlive=true;
request.ContentType=“application/x-www-form-urlencoded”;
请求超时=10000;
request.Headers.Remove(HttpRequestHeader.Cookie);
var bs=Encoding.UTF8.GetBytes(参数);
使用(Stream reqStream=request.GetRequestStream())
{
请求流写入(bs,0,bs.长度);
}
使用(WebResponse=request.GetResponse())
{
var sr=新的StreamReader(response.GetResponseStream());
结果=sr.ReadToEnd();
高级关闭();
}
如果(!string.IsNullOrEmpty(结果))
{
TokenData TokenData=JsonConvert.DeserializeObject(结果);
返回UpdateAuthorizotionFromToken(tokendata);
}
返回null;
}
结果变量为空。
请让我知道,如果你有任何可能导致这一点的想法。最初我认为是因为cookies,所以我尝试从请求中删除它们。
提前感谢。亲爱的,只需使用以下代码创建webclient,您将在tokeninfo中获得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的令牌的子字符串。
在声音云上上传曲目
私有void 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());
}
}
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());
}
}