2013-02-07 101 views
1

我从登录到Facebook的结果中获取accessToken的问题。 在Page_load中,我的网址无法正确解析。Facebook的C#SDK获取用户accessToken

GenerateLoginUrl方法正常工作,我可以在QueryString中看到accessToken。 我试过从它得到它,但它不工作。

protected void Page_Load(object sender, EventArgs e) 
{ 
    var fb = new FacebookClient(); 

    FacebookOAuthResult result; 
    if (fb.TryParseOAuthCallbackUrl(Request.Url, out result)) 
    { 
     if (result.IsSuccess) 
     { 
      // result clicked authorized 
      var accessToken = result.AccessToken; 
      Label1.Text = accessToken.ToString(); 
     } 
     else 
     { 
      // user clicked cancelled and didn't authorize the app 
      var error = result.ErrorDescription; 
      Label1.Text = error; 
     } 
    } 
    else 
    { 
     //This is were it always goes 
     Label1.Text = "not valid facebook url"; 
    } 


} 


private Uri GenerateLoginUrl(string appId, string extendedPermissions) 
{ 

    try 
    { 
     dynamic parameters = new ExpandoObject(); 
     parameters.client_id = appId; 
     parameters.redirect_uri = "local iis ip"; 

     // The requested response: an access token (token), an authorization code (code), or both (code token). 
     parameters.response_type = "token"; 

     // list of additional display modes can be found at http://developers.facebook.com/docs/reference/dialogs/#display 
     parameters.display = "popup"; 

     // add the 'scope' parameter only if we have extendedPermissions. 
     if (!string.IsNullOrWhiteSpace(extendedPermissions)) 
      parameters.scope = extendedPermissions; 

     // generate the login url 
     var fb = new FacebookClient(); 

     var url = fb.GetLoginUrl(parameters); 

     return url; 
    } 

    catch (FacebookOAuthException fbex) 
    { 
     Label1.Text = fbex.Message; 
     return null; 

    } 

    catch (Exception ex) 
    { 
     Label1.Text = ex.Message; 
     return null; 
    } 


} 


protected void Button1_Click(object sender, EventArgs e) 
{ 
    string AppId = ConfigurationManager.AppSettings["apiKey"]; 
    string ExtendedPermissions = ConfigurationManager.AppSettings["ExtendedPermissions"]; 

    var url = GenerateLoginUrl(AppId, ExtendedPermissions); 

    Response.Redirect(url.AbsoluteUri, false); 
} 

感谢您的帮助。

更新:

在Request.Url的URL始终是:

http://localhost:23560/Appname/default.aspx 

但我可以SE在浏览器中真实的URL,它是:

http://localhost:23560/Appname/#access_token=0000000000&expires_in=3821 

于是方式不能asp.net正确读取url?

+0

可能的[如何使用C#SDK获取访问令牌]的副本(http://stackoverflow.com/questions/9906486/how-to-get-an-access-token-using-c-sharp-sdk) –

回答

6

我发现answare,它是:

你必须得到这些代码并没有道理,该代码是在查询字符串的accessToken会显示被剥离。

parameters.response_type = "token"; 

交换

parameters.response_type = "code"; 

然后交换到代码到令牌

dynamic token = fb.Get("oauth/access_token", new 
       { 
        client_id = "appid", 
        client_secret = "appsecret", 
        redirect_uri = url, 
        code = Request.QueryString["code"] 
       }); 

变种的accessToken = token.access_token;

+0

查询字符串代码?我们如何识别它? –

相关问题