1

我正在试用 ASP.Net MVC 4 Facebook 模板和“框架”,我发现很难在 Internet 上获得任何帮助,除了“生日应用程序”示例。

我正在构建一个带有“喜欢门”的简单 Facebook 应用程序,这意味着人们只有在“喜欢”某个页面时才能访问该应用程序。

我的想法是在控制器中检查用户是否“喜欢”了粉丝页面,如果没有,将他重定向到“LikeFirst”视图。

这是控制器,直接来自模板:

   [FacebookAuthorize("email", "user_photos")]
   public async Task<ActionResult> Index(FacebookContext context)
   {
       if (ModelState.IsValid)
       {
          var user = await context.Client.GetCurrentUserAsync<MyAppUser>();

          if(//how check the user has liked the fan page)
          {
             return View(user);
          }
          else
          {
             return View("LikeFirst");
          }
       }

       return View("Error");
   }

根据我在示例中得到的信息,框架实际上使用“MyAppUser”对象来构造 Facebook 查询。

这是示例应用程序中使用的类型。

public class MyAppUser
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }

    [JsonProperty("picture")] // This renames the property to picture.
    [FacebookFieldModifier("type(large)")] // This sets the picture size to large.
    public FacebookConnection<FacebookPicture> ProfilePicture { get; set; }

    [FacebookFieldModifier("limit(8)")] // This sets the size of the friend list to 8, remove it to get all friends.
    public FacebookGroupConnection<MyAppUserFriendSimple> Friends { get; set; }

    [FacebookFieldModifier("limit(16)")] // This sets the size of the photo list to 16, remove it to get all photos.
    public FacebookGroupConnection<FacebookPhoto> Photos { get; set; }
}

从 Facebook 文档中,我应该能够通过对 /PROFILE_ID/likes/PAGE_ID 执行 HTTP GET 来检查这一点,但我应该如何使用 ASP.Net MVC Facebook 框架来做到这一点?我可以在 MyAppUser 类中更改什么吗?这是完全不同的东西吗?

谢谢!

4

2 回答 2

2

所以就在今天早上遇到了这个挑战——不得不稍微修改一下才能弄清楚。这就是你所做的

在您的用户类型上创建“喜欢”属性

public class MyAppUser
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }

    public FacebookGroupConnection<FacebookLike> Likes { get; set; }

    ...
}

当然这意味着你必须创建一个 FacebookLike 类型

public class FacebookLike
{
    public string Id { get; set; }
    public string Name { get; set; }
}

将以下权限字符串添加到您的 FacebookAuthorizeAttribute

    [FacebookAuthorize("email", "user_photos", "user_likes")]
    public async Task<ActionResult> Index(FacebookContext context)
    {
        ...
    }

最后要找出用户喜欢您的页面,您可以找到您的页面 ID 并将以下代码放入您要执行检查的相关控制器方法中 -

            if (user.Likes.Data.FirstOrDefault(like => like.Id == "<your_fb_pageid>") == null)
            {
                return View("LikeUs");
            }

希望这可以帮助

于 2013-07-22T10:06:42.193 回答
1

根据 Cordell Lawrence 的回答,实际上如果您只想检查用户是否喜欢某个页面,可以添加 FacebookFieldModifier

public class MyAppUser
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }

    [FacebookFieldModifier("id({PAGE_ID})")]
    public FacebookGroupConnection<FacebookLike> Likes { get; set; }

    ...
}

Facebook点赞课

public class FacebookLike
{
    public string Id { get; set; }
    public string Name { get; set; }
}

获得用户的许可

[FacebookAuthorize("email", "user_photos", "user_likes")]
public async Task<ActionResult> Index(FacebookContext context)
{
    ...
}

最重要的是 FacebookFieldModifier。如果用户不喜欢该页面,则 Facebook 返回的列表将为空

我还没有尝试编译上面的代码,希望这有帮助

于 2014-04-06T12:46:54.730 回答