Я довольно новичок в Facebook C # SDK (5.0.3), что, вероятно, является причиной этого вопроса.По сути, я пытаюсь получить профиль текущего пользователя, адрес электронной почты, фотографию и т. Д. И т. Д. Ниже вы найдете код для моих двух страниц (MyLogin.aspx и landingpage.aspx).Я использую веб-формы купить путь.
На первой странице отображается кнопка входа в систему, а затем перенаправляется на целевую страницу.Смотрите мои комментарии в коде для получения дополнительной информации.Я получаю различные исключения, которые я не знаю, как решить.
Если у вас есть какие-либо рекомендации, которые позволяют мне двигаться вперед, я очень благодарен за это.
Итак, вот код ...
MyLogin.aspx.cs
protected void DoLogin(object sender, EventArgs e)
{
Response.Redirect(GetFacebookLoginUrl());
}
private static string GetFacebookLoginUrl()
{
try
{
const string baseUrl = "http://localhost:5000/";
var extendedPermissions = new[] { "offline_access", "publish_stream" };
var oauth = new FacebookOAuthClient
{
ClientId = FacebookContext.Current.AppId
};
//If I use token instead of code the FacebookOAuthResult.TryParse will return false.
var parameters = new Dictionary<string, object>{{ "response_type", "code" },{ "display", "page" }};
if (extendedPermissions != null && extendedPermissions.Length > 0)
{
var scope = new StringBuilder();
scope.Append(string.Join(",", extendedPermissions));
parameters["scope"] = scope.ToString();
}
parameters["redirect_uri"] = String.Format("{0}LandingPage.aspx", baseUrl);
var url = oauth.GetLoginUrl(parameters).OriginalString;
return url;
}
catch (Exception)
{
return string.Empty;
}
}
... и вот страница, где все это, похоже, дошло до $ "! @@ %% ... если вы понимаете, о чем я.
Landingpage.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
var cl = new FacebookOAuthClient(FacebookContext.Current);
FacebookOAuthResult result = null;
var url = Request.Url.AbsoluteUri;
if (!FacebookOAuthResult.TryParse(url, out result)) return;
if (result.IsSuccess)
{
//result.AccessToken is null, that's why I create a new instance of FacebookClient to get hold of the AccessToken.
var accessToken1 = result.AccessToken;
var app = new FacebookClient(FacebookContext.Current.AppId, FacebookContext.Current.AppSecret);
var accessToken2 = app.AccessToken;
//I now got an AccessToken but when I call client.Get("me");
// I'll get (OAuthException) An active access token must be used to query information about the current user.
//var client = new FacebookClient(accessToken2);
//dynamic me = client.Get("me");
//string firstName = me.first_name;
//string lastName = me.last_name;
//string email = me.email;
// So, how do I get an active access token?
// Well, I did try using the FacebookOAuthClient object and the method ExchangeCodeForAccessToken (as you can see below).
cl.ClientId = FacebookContext.Current.AppId;
cl.ClientSecret = FacebookContext.Current.AppSecret;
cl.RedirectUri = new UriBuilder("http://localhost:5000/").Uri;
var parameters = new Dictionary<string, object> { { "permissions", "offline_access" } };
var x = cl.ExchangeCodeForAccessToken(result.Code, parameters);
//However, this now gives me the Exception (OAuthException) Error validating verification code.
}
else
{
var errorDescription = result.ErrorDescription;
var errorReason = result.ErrorReason;
}
}
Спасибо !!
// Nicke