C# 使用owin检索外部身份验证数据时出现问题

C# 使用owin检索外部身份验证数据时出现问题,c#,.net,facebook,asp.net-mvc-5,owin,C#,.net,Facebook,Asp.net Mvc 5,Owin,有人能举个例子说明如何从Facebook检索个人资料图片url吗? 不知何故,我不能这样做。我可以检索名字、姓氏、电子邮件、性别,它应该允许检索个人资料图片,但它不允许。索赔单上没有图片这样的东西。 我找不到任何例子。这是我的密码: Startup.Auth.cs var x = new FacebookAuthenticationOptions(); x.Scope.Add("email"); //x.Scope.Add("picture"); x.AppId = "*"; x.AppSecr

有人能举个例子说明如何从Facebook检索个人资料图片url吗? 不知何故,我不能这样做。我可以检索名字、姓氏、电子邮件、性别,它应该允许检索个人资料图片,但它不允许。索赔单上没有图片这样的东西。 我找不到任何例子。这是我的密码:

Startup.Auth.cs

var x = new FacebookAuthenticationOptions();
x.Scope.Add("email");
//x.Scope.Add("picture");
x.AppId = "*";
x.AppSecret = "***";
x.Provider = new FacebookAuthenticationProvider()
{
     OnAuthenticated = async context =>
     {
          context.Identity.AddClaim(new System.Security.Claims.Claim("FacebookAccessToken", context.AccessToken));
          foreach(var claim in context.User)
          {
               var claimType = string.Format("urn:facebook:{0}", claim.Key);
               string claimValue = claim.Value.ToString();
               if(!context.Identity.HasClaim(claimType, claimValue))
                    context.Identity.AddClaim(new System.Security.Claims.Claim(claimType, claimValue, "XmlSchemaString", "Facebook"));
          }
     }
};

x.SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie;
app.UseFacebookAuthentication(x);
如何检索某些数据的代码:

var loginInfo = await AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);
var firstNameClaim = loginInfo.Claims.First(c => c.Type == "urn:facebook:first_name");
var lastNameClaim = loginInfo.Claims.First(c => c.Type == "urn:facebook:last_name");
var gender = loginInfo.Claims.First(c => c.Type == "urn:facebook:gender");

有什么想法吗?我使用FacebookSDK for.NET获得了所需的结果,但我很好奇,如果不使用FacebookSDK for.NET,我怎么能获得同样的结果。希望社区能在这方面提供帮助

不确定这是不是你应该用的方法。但是Facebook的个人资料图片可以在上找到,所以你只需要获取用户的ID并将其交换到该URL中


例如,我的Facebook ID是729196216,所以如果你要求,你可以得到我的丑陋的马克杯

似乎无法将图片url作为带有参数的对象,因为每次用户更改其个人资料图片时,图片url都会更改,所以存储静态url没有任何意义

对于我的解决方案,我编写了一个获取配置文件图片动态url的方法,代码如下:

private string GetFacebookProfilePicture(ClaimsIdentity externalInfoSoruce) {
        var facebookUserID = externalInfoSoruce.Claims.First(c => c.Type == "urn:facebook:id").Value;
        string profilePicturePath = string.Format("http://graph.facebook.com/{0}/picture?type=large", facebookUserID);
        return profilePicturePath;
    }

现在,每次我想向用户展示他的个人资料图片时,我都可以将该链接插入到
中。是的,我知道这个。但您不能像在图形浏览器中那样设置高度或其他参数。如果您编写Therme/picture?redirect=false,您将获得当前用户配置文件picture的参数。应该有其他的方法来做这件事。。这个链接似乎起作用了。但是否有机会在范围内检索URL或图片对象,如我们接收姓名、姓氏、电子邮件和性别?因为在Facebook SDK中,您可以接收图片对象或仅接收图片URL