[英]Twitter OAuth2 - using WinRT
我有以下代码:
var oAuthConsumerKey = key;
var oAuthConsumerSecret = secret;
var oAuthUri = new Uri("https://api.twitter.com/oauth2/token");
// Do the Authenticate
var authHeaderFormat = "Basic {0}";
var authHeader = string.Format(authHeaderFormat,
Convert.ToBase64String(Encoding.UTF8.GetBytes(Uri.EscapeDataString(oAuthConsumerKey) + ":" +
Uri.EscapeDataString((oAuthConsumerSecret)))
));
var postBody = "grant_type=client_credentials";
//"application/x-www-form-urlencoded;charset=UTF-8"
var req = new HttpClient();
req.DefaultRequestHeaders.Add("Authorization", authHeader);
var c = Convert.ToBase64String(Encoding.UTF8.GetBytes(postBody));
IHttpContent content = new HttpStringContent(c, Windows.Storage.Streams.UnicodeEncoding.Utf8);
HttpResponseMessage response = await req.PostAsync(oAuthUri, content);
IHttpContent responseContent = response.Content;
using (responseContent)
{
var data = await responseContent.ReadAsStringAsync();
我在上面指示的行上得到的错误是这样的:
response.Content = {"errors": [{"code":170,"label":"forbidden_missing_parameter","message":"Missing required parameter: grant_type"}]}
因此,我的问题是:如何指定“授权类型”参数?
编辑:
按照下面@Jon的建议,我尝试将Grant_type添加到“内容”的构造函数中,但没有区别。
这就是我为其他几个云服务执行的操作。 我从未尝试过Twitter,但是只要授权标头正确,它就应该起作用:
async Task<HttpResponseMessage> GetToken(string key, string secret)
{
var oAuthConsumerKey = key;
var oAuthConsumerSecret = secret;
var oAuthUri = new Uri("https://api.twitter.com/oauth2/token");
HttpClient httpClient = new HttpClient();
var authHeader = string.Format("Basic {0}",
Convert.ToBase64String(Encoding.UTF8.GetBytes(Uri.EscapeDataString(oAuthConsumerKey) + ":" +
Uri.EscapeDataString(oAuthConsumerSecret))));
httpClient.DefaultRequestHeaders.Add("Authorization", authHeader);
HttpRequestMessage msg = new HttpRequestMessage(new HttpMethod("POST"), new Uri("https://api.twitter.com/oauth2/token"));
msg.Content = new StringContent("grant_type=client_credentials");
msg.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
HttpResponseMessage response = await httpClient.SendAsync(msg);
return response;
}
您是否尝试使用引号设置值?
var postBody = "grant_type=\"client_credentials\"";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.