我一直在为 windows phone 开发一个相当基本的 twitter 应用程序,并且在登录过程中遇到了一个问题。我正在使用 tweetsharp api,对此我没有任何问题。我一直在关注本教程:http: //mobile.tutsplus.com/tutorials/windows/wp7-integrating-twitter-with-your-app/
问题是,一旦用户授予我的应用程序权限,我就无法从 WebControl 读取验证程序代码并完成身份验证过程。我不想让用户复制代码并粘贴回我的应用程序,因为这会妨碍用户体验,而且我从未见过手机上的 twitter 应用程序会这样做。我想我已经找到了问题,但我不确定如何解决它L
以下是从验证页面解析 AbsoluteUri 以获取验证者代码的代码:
// From Hammock.Extensions.StringExtensions.cspublic
static IDictionary<string, string> ParseQueryString(string query)
{
// [DC]: This method does not URL decode, and cannot handle decoded input
if (query.StartsWith("?")) query = query.Substring(1);
if (query.Equals(string.Empty))
{
return new Dictionary<string, string>();
}
var parts = query.Split(new[] { '&' });
return parts.Select(
part => part.Split(new[] { '=' })).ToDictionary(
pair => pair[0], pair => pair[1]
);
}
这是调用解析方法的代码:
// called everytime navigation occurs in the WebControl
private void browserNavigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
MessageBox.Show(e.Uri.AbsoluteUri); // for debugging
MessageBox.Show(Browser.SaveToString()); // for debugging
if (e.Uri.AbsoluteUri.Contains("oauth_verifier"))
{
var values = ParseQueryString(e.Uri.AbsoluteUri);
string verifier = values["oauth_verifier"];
Globals.client.GetAccessToken(Globals.requestToken, verifier, processAccessToken);
Dispatcher.BeginInvoke(() => { Browser.Visibility = System.Windows.Visibility.Collapsed; });
MessageBox.Show(verifier); // for debugging
}
}
这是验证者页面的 AbsoluteUri:https ://api.twitter.com/oauth/authorize
AbsoluteUri 不包含验证码!我相信这是问题所在,因为教程中的代码假定验证程序代码在页面的 AbsoluteUri 中。我查看了页面的 html,希望通过它解析以检索验证器,但不幸的是 twitter 隐藏了它。有没有人有任何建议或解决方法来解决这个问题?如果我绝对需要,我可以申请 xauth 访问权限,但我将其保存为最后的手段。如果有人想查看 html 代码,请询问,我可以尝试发布。非常感谢任何帮助!
谢谢, 挤压