将facebook C#sdk与WPF web浏览器一起使用时出错

将facebook C#sdk与WPF web浏览器一起使用时出错,facebook,facebook-c#-sdk,Facebook,Facebook C# Sdk,我是facebook c#sdk的新手。我跟着教程走了 我创建了一个在登录后显示用户名的应用程序。这是我的密码: public partial class MainWindow : Window { private string appId = "appid"; private string extenededPermissions = "offline_access,publish_stream"; private Uri loginUrl = null; pr

我是facebook c#sdk的新手。我跟着教程走了

我创建了一个在登录后显示用户名的应用程序。这是我的密码:

public partial class MainWindow : Window
{
    private string appId = "appid";
    private string extenededPermissions = "offline_access,publish_stream";
    private Uri loginUrl = null;
    private string accessToken = null;
    private string userName = null;

    public MainWindow()
    {
        InitializeComponent();
    }

    /// <summary>
    /// Function to get the login url
    /// with the requested permissions
    /// </summary>
    private void GetLoginUrl()
    {
        dynamic parameters = new ExpandoObject();
        // add the client id
        parameters.client_id = appId;
        // add the redirect uri
        parameters.redirect_uri = "https://www.facebook.com/connect/login_success.html";
        // requested response
        parameters.response_type = "token";
        // type of display
        parameters.display = "popup";
        // If extended permissions are present
        if (!string.IsNullOrWhiteSpace(extenededPermissions))
            parameters.scope = extenededPermissions;
        // Create the login url
        Facebook fc = new FacebookClient();
        loginUrl = fc.GetLoginUrl(parameters);
    }

    private void WindowLoaded(object sender, RoutedEventArgs e)
    {
        // get the login url
        GetLoginUrl();
        // Navigate to that page
        webBrowser.Navigate(loginUrl);
    }

    private void webBrowser_Navigated(object sender, NavigationEventArgs e)
    {
        var fc = new FacebookClient();
        FacebookOAuthResult fr;
        // Check the returned url
        if (fc.TryParseOAuthCallbackUrl(e.Uri, out fr))
        {
            // check if authentication is success or not
            if (fr.IsSuccess)
            {
                getUserName(out userName);
            }
            else
            {
                var errorDes = fr.ErrorDescription;
                var errorReason = fr.ErrorReason;
            }
        }
        else
        {

        }
    }
    private void getUserName(out string name)
    {
        var fb = new FacebookClient(accessToken);
        // Get the user details
        dynamic result = fb.Get("me");
        // Get the user name
        name = result.name;
        MessageBox.Show("Hai " + name + ",Welcome to my App");
    }

}
我登录后,它正在重定向到
重定向\u uri
。但是
fc.TryParseOAuthCallbackUrl(e.Uri,out-fr)
失败,尽管webbrowser重定向到身份验证成功页面


所以我无法获得访问令牌。我的代码中可能存在什么问题?

这没有回答问题,但我看到您正在请求脱机访问权限。Facebook在几天前删除了离线访问。相反,您需要一个扩展访问令牌。您可以通过将您试图获取的访问令牌交换为扩展令牌来获得它。它们会持续大约2-3个月,之后你必须买一个新的。

不管怎样,我已经找到了解决办法。.多亏了这些问题的答案

我已将Winforms web browser控件添加到wpf,身份验证正在工作。问题在于wpf web browser。它只是在#token之后省略url,因此parseurl将无法对其进行身份验证

这是修改后的代码

       private void WindowLoaded(object sender, RoutedEventArgs e)
       {
          // create the windows form host
        System.Windows.Forms.Integration.WindowsFormsHost sample = 
                       new System.Windows.Forms.Integration.WindowsFormsHost();
        // create a new web browser
        webBrowser = new System.Windows.Forms.WebBrowser();
        // add it to winforms
        sample.Child = webBrowser;
        // add it to wpf
        canvas1.Children.Add(sample);

        webBrowser.Navigated += webBrowser_Navigated;
        webBrowser.Navigate(loginURL);
       }

     void webBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
      {
         // do the authentication
         var fc = new FacebookClient();
         FacebookOAuthResult fr;
         // Check the returned url
         if (fc.TryParseOAuthCallbackUrl(e.Url, out fr))
         {
            // check if authentication is success or not
            if (fr.IsSuccess)
            {
                accessToken = fr.AccessToken;
                // Actions to do

            }
            else
            {
                var errordes = fr.ErrorDescription;
                var errorreason = fr.ErrorReason;
            }
         }
         else
         {
             //Not a valid url
         }
      }

问题解决了

但即使在删除脱机访问后,问题仍然存在。
       private void WindowLoaded(object sender, RoutedEventArgs e)
       {
          // create the windows form host
        System.Windows.Forms.Integration.WindowsFormsHost sample = 
                       new System.Windows.Forms.Integration.WindowsFormsHost();
        // create a new web browser
        webBrowser = new System.Windows.Forms.WebBrowser();
        // add it to winforms
        sample.Child = webBrowser;
        // add it to wpf
        canvas1.Children.Add(sample);

        webBrowser.Navigated += webBrowser_Navigated;
        webBrowser.Navigate(loginURL);
       }

     void webBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
      {
         // do the authentication
         var fc = new FacebookClient();
         FacebookOAuthResult fr;
         // Check the returned url
         if (fc.TryParseOAuthCallbackUrl(e.Url, out fr))
         {
            // check if authentication is success or not
            if (fr.IsSuccess)
            {
                accessToken = fr.AccessToken;
                // Actions to do

            }
            else
            {
                var errordes = fr.ErrorDescription;
                var errorreason = fr.ErrorReason;
            }
         }
         else
         {
             //Not a valid url
         }
      }