C# oauth_problem=token_刷新雅虎时被拒绝';OAuth访问令牌
我已经用Hammock完成了Oauth,我成功地获得了访问令牌、访问令牌机密和会话句柄,但现在我必须在令牌过期时获得 我已经按照指令进行了操作,我尝试使用urldecode和不使用urldecode传递访问令牌,但我无法获得令牌,我获得了 oauth_问题=令牌_被拒绝 更新: 这是我的密码:C# oauth_problem=token_刷新雅虎时被拒绝';OAuth访问令牌,c#,oauth,yahoo-api,C#,Oauth,Yahoo Api,我已经用Hammock完成了Oauth,我成功地获得了访问令牌、访问令牌机密和会话句柄,但现在我必须在令牌过期时获得 我已经按照指令进行了操作,我尝试使用urldecode和不使用urldecode传递访问令牌,但我无法获得令牌,我获得了 oauth_问题=令牌_被拒绝 更新: 这是我的密码: ##呼叫## var AccessTokenQuery=OAuthUtil.GetAccessTokenQueryRenewal(accessToken,会话句柄,accessTokenSecret);
##呼叫##
var AccessTokenQuery=OAuthUtil.GetAccessTokenQueryRenewal(accessToken,会话句柄,accessTokenSecret);
AccessTokenQuery.RequestAsync(AppSettings.AccessTokenUri,null);
AccessTokenQuery.QueryResponse+=新事件处理程序(AccessTokenQuery\u QueryResponse);
内部静态OAuthWebQuery GetAccessTokenQueryRenewal(字符串oauth\u令牌、字符串会话\u句柄、字符串oauth\u令牌\u秘密)
{
var oauth=新的OAuthWorkflow
{
AccessTokenUrl=AppSettings.AccessTokenUri,
ConsumerKey=AppSettings.ConsumerKey,
ConsumerCret=AppSettings.ConsumerKeyCret,
SignatureMethod=OAuthSignatureMethod.HmacSha1,
ParameterHandling=OAuthParameterHandling.HttpAuthorizationHeader,
TokenSecret=oauth_token_secret,
令牌=oauth_令牌,
会话句柄=会话句柄,
Version=AppSettings.oAuthVersion
};
var info=oauth.BuildAccessTokenInfo(WebMethod.Post);
var objOAuthWebQuery=新的OAuthWebQuery(info,false);
objOAuthWebQuery.HasElevatedPermissions=true;
objOAuthWebQuery.SilverlightUserAgentHeader=“Hammock”;
返回objOAuthWebQuery;
}
void AccessTokenQuery_QueryResponse(对象发送方,WebQueryResponseeEventargs e)
{
尝试
{
StreamReader=新的StreamReader(即响应);
string strResponse=reader.ReadToEnd();
var parameters=MainUtil.GetQueryParameters(strResponse);
accessToken=参数[“oauth_令牌”];
accessTokenSecret=参数[“oauth_token_secret”];
session_handle=参数[“oauth_session_handle”];
MainUtil.SetKeyValue(“AccessToken”,AccessToken);
MainUtil.SetKeyValue(“AccessTokenSecret”,AccessTokenSecret);
MainUtil.SetKeyValue(“会话句柄”,会话句柄);
userLoggedIn();
}
捕获(例外情况除外)
{
Dispatcher.BeginInvoke(()=>
{
MessageBox.Show(例如Message);
});
}
}
您可以尝试的快速可能性:您说您“尝试使用urldecode传递访问令牌”。你试过使用urlencode吗?Urldecode用于解码从web调用返回的URL,编码是在传递到web调用之前所做的事情
另外,请注意,Oauth的编码方案与.NET默认编码中使用的编码方案略有不同。不过,您可以轻松编写自己的编码例程,有关详细信息,请查看oauth规范
例:
你需要显示你的代码我用代码编辑过!你有解决办法吗?如果是这样的话,为什么不把它贴在这里来帮助其他有同样问题的人呢?嗨,马可,我没有找到解决办法。。。我尝试了一些获得“刷新访问令牌”的方法,但没有结果!你有什么建议吗?
##the call##
var AccessTokenQuery = OAuthUtil.GetAccessTokenQueryRenewal(accessToken, session_handle, accessTokenSecret);
AccessTokenQuery.RequestAsync(AppSettings.AccessTokenUri, null);
AccessTokenQuery.QueryResponse += new EventHandler<WebQueryResponseEventArgs>(AccessTokenQuery_QueryResponse);
internal static OAuthWebQuery GetAccessTokenQueryRenewal(string oauth_token,string session_handle, string oauth_token_secret)
{
var oauth = new OAuthWorkflow
{
AccessTokenUrl = AppSettings.AccessTokenUri,
ConsumerKey = AppSettings.consumerKey,
ConsumerSecret = AppSettings.consumerKeySecret,
SignatureMethod = OAuthSignatureMethod.HmacSha1,
ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader,
TokenSecret = oauth_token_secret,
Token = oauth_token,
SessionHandle = session_handle,
Version = AppSettings.oAuthVersion
};
var info = oauth.BuildAccessTokenInfo(WebMethod.Post);
var objOAuthWebQuery = new OAuthWebQuery(info, false);
objOAuthWebQuery.HasElevatedPermissions = true;
objOAuthWebQuery.SilverlightUserAgentHeader = "Hammock";
return objOAuthWebQuery;
}
void AccessTokenQuery_QueryResponse(object sender, WebQueryResponseEventArgs e)
{
try
{
StreamReader reader = new StreamReader(e.Response);
string strResponse = reader.ReadToEnd();
var parameters = MainUtil.GetQueryParameters(strResponse);
accessToken = parameters["oauth_token"];
accessTokenSecret = parameters["oauth_token_secret"];
session_handle = parameters["oauth_session_handle"];
MainUtil.SetKeyValue<string>("AccessToken", accessToken);
MainUtil.SetKeyValue<string>("AccessTokenSecret", accessTokenSecret);
MainUtil.SetKeyValue<string>("SessionHandle", session_handle);
userLoggedIn();
}
catch (Exception ex)
{
Dispatcher.BeginInvoke(() =>
{
MessageBox.Show(ex.Message);
});
}
}
private string UrlEncode(string value)
{
string unreserved = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~";
StringBuilder result = new StringBuilder();
foreach (char symbol in value)
{
if (unreserved.IndexOf(symbol) != -1)
result.Append(symbol);
else
result.Append('%' + String.Format("{0:X2}", (int)symbol));
}
return result.ToString();
}