C# FaceBook异常未处理

C# FaceBook异常未处理,c#,wpf,facebook,windows-phone-7,facebook-c#-sdk,C#,Wpf,Facebook,Windows Phone 7,Facebook C# Sdk,我在这些方面是新手,我一直在测试api。。。 我遇到了这样一种情况: 如果用户更改Facebook的密码 访问令牌已续订。。。并尝试发布API发布 异常和应用程序崩溃。。。 如何解决这种情况 try { FacebookApp app = new FacebookApp(FacebookToken); var args = new Dictionary<string, object>();

我在这些方面是新手,我一直在测试api。。。 我遇到了这样一种情况:

如果用户更改Facebook的密码

访问令牌已续订。。。并尝试发布API发布 异常和应用程序崩溃。。。 如何解决这种情况

         try {
              FacebookApp app = new FacebookApp(FacebookToken);
              var args = new Dictionary<string, object>();
              args["message"] = "hi";
              args["caption"] = "appcaption";
              args["description"] = "appdescription";
              args["name"] = "appname";
              args["picture"] = "apppicture";
              args["link"] = "applink";
              app.ApiAsync((X) => { calback(X); }, null, "/me/feed", args, HttpMethod.Post);
          }
           catch (Exception ex) {
               Uri url = new Uri("/MyFacebook.xaml", UriKind.Relative);
               NavigationService.Navigate(url);
           }
谢谢你看到这篇文章了吗

具体来说,请看第3部分:


您是否可以存储访问令牌,然后在出现错误时再次显示登录页面

SDK的行为是预期的。异常不是“崩溃”应用程序,而是告诉您何时出现错误状态。基本上,您的操作是正确的,但是您不应该捕获异常,而应该只捕获FaceBookOAutheException,如下所示:

try {
    FacebookApp app = new FacebookApp(FacebookToken);
    var args = new Dictionary<string, object>();
    args["message"] = "hi";
    args["caption"] = "appcaption";
    args["description"] = "appdescription";
    args["name"] = "appname";
    args["picture"] = "apppicture";
    args["link"] = "applink";
    app.ApiAsync("/me/feed", args, (X) => { calback(X); }, HttpMethod.Post);
}
catch (FacebookOAuthException) {
    // This is where you would reauthorize the user or send them to a 'login' page
    Uri url = new Uri("/MyFacebook.xaml", UriKind.Relative);
    NavigationService.Navigate(url);
}
试试看{
FacebookApp app=新的FacebookApp(FacebookToken);
var args=新字典();
args[“message”]=“hi”;
args[“caption”]=“appcaption”;
args[“description”]=“appdescription”;
args[“name”]=“appname”;
参数[“图片”]=“应用图片”;
参数[“链接”]=“应用链接”;
app.apianc(“/me/feed”,args,(X)=>{calback(X);},HttpMethod.Post);
}
捕获(FaceBookOAutheException){
//在这里,您可以重新授权用户或将其发送到“登录”页面
uriurl=newuri(“/MyFacebook.xaml”,UriKind.Relative);
导航服务。导航(url);
}

我还建议您阅读.Net异常处理,以便更好地了解使用它们的时间和原因

使用FacebookAuthenticationResult,您可以检查是否存在错误,然后避免执行请求:

 private void FacebookLoginBrowser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
    {
        FacebookAuthenticationResult authResult;
        if (FacebookAuthenticationResult.TryParse(e.Uri, out authResult))
        {
            if (authResult.ErrorReason == "user_denied")
            {
                // Do something knowing that this failed (cancel).                   }
            else
            {
                fbApp.Session = authResult.ToSession();
                loginSucceeded(); 
            }                
        }
    }

这个api与我们的链接解释的方式不同。。。但是在这个api上,工作比你的建议更容易。。。在我的代码中,我使用的是用户登录时存储的访问令牌,但是。。。在墙上张贴时,我尝试了一次。。捕捉到如果发生一个错误,导航服务将打开登录页面。。。不幸的是,我不知道为什么。。。应用程序崩溃而不是捕获异常…非常感谢您的帮助我正在测试您的解决方案并继续犯相同的错误。。。有什么不对劲吗??:我不明白:(我不明白你的意思。你在收到异常后是否重新授权用户?不,我不知道…但是使用你的解决方案,异常没有被捕获…应用程序崩溃…我的解决方案也会发生同样的情况…如果在发布之前我有一个webrowser,这段代码会起作用…但我没有…我只有访问令牌,我没有正在尝试即时发布,无需登录页面…谢谢
 private void FacebookLoginBrowser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
    {
        FacebookAuthenticationResult authResult;
        if (FacebookAuthenticationResult.TryParse(e.Uri, out authResult))
        {
            if (authResult.ErrorReason == "user_denied")
            {
                // Do something knowing that this failed (cancel).                   }
            else
            {
                fbApp.Session = authResult.ToSession();
                loginSucceeded(); 
            }                
        }
    }