Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC 4 Facebook FacebookContext-如何获取参考_C#_Facebook_Asp.net Mvc 4 - Fatal编程技术网

C# ASP.NET MVC 4 Facebook FacebookContext-如何获取参考

C# ASP.NET MVC 4 Facebook FacebookContext-如何获取参考,c#,facebook,asp.net-mvc-4,C#,Facebook,Asp.net Mvc 4,今天,我一直在尝试用微软开发的MVC4 Facebook API编程(基于以下示例:) 到目前为止,我成功地操纵了MyAppUser模型,等等。一切都很好,正如预期的那样。我在切换控制器时只有一个小问题 有没有办法通过控制器保留FacebookContext对象 不幸的是,上面的示例(来自Microsoft)仅在主控制器中加载MyAppUser,如下所示: [FacebookAuthorize("email", "user_photos")] public async Task&

今天,我一直在尝试用微软开发的MVC4 Facebook API编程(基于以下示例:)

到目前为止,我成功地操纵了MyAppUser模型,等等。一切都很好,正如预期的那样。我在切换控制器时只有一个小问题

有没有办法通过控制器保留FacebookContext对象

不幸的是,上面的示例(来自Microsoft)仅在主控制器中加载MyAppUser,如下所示:

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

        return View("Error");
    }
[facebook授权(“电子邮件”、“用户照片”)]
公共异步任务索引(FacebookContext上下文){
if(ModelState.IsValid){
var user=await context.Client.GetCurrentUserAsync();
返回视图(用户);
}
返回视图(“错误”);
}
如果我在应用程序中使用另一个控制器,该怎么办?如何获取FacebookContext引用以获取用户

我尝试过的事情:

将FacebookContext上下文放入另一个控制器(始终为空)

将FacebookContext对象放入会话或ViewBag中-没有用,而且听起来太脏了

我是不是错过了一些重要的东西

我只是想有一个不同的控制器,通过几个操作来管理用户的个人资料,这将完全独立于Facebook的数据(通过本地托管的数据库)来完成。我需要加载上下文的唯一原因是获取当前用户的电子邮件地址,以便在此基础上创建他们的帐户

任何帮助都将不胜感激,因为我花了相当多的时间试图修复它

我的示例控制器可以是:

        public ActionResult Manage()
    {
            var user = await context.Client.GetCurrentUserAsync<Models.MyAppUser>();
            if (MyDALFunction.GetUserByMail(user.Email) == null) {
                // Create user functions, create a ViewModel, pass it on and do some editing.
            }
            return View(user);

    }
public ActionResult Manage()
{
var user=await context.Client.GetCurrentUserAsync();
if(MyDALFunction.GetUserByMail(user.Email)==null){
//创建用户函数、创建ViewModel、传递它并进行一些编辑。
}
返回视图(用户);
}

对不起,回答得太晚了。。但是如果我正确理解了您的问题,那么我认为您正在尝试在回发时在操作方法中获取FacebookContext对象。如果是,那么。。在.cshtml中,尝试将

<a target="_top" href="@GlobalFacebookConfiguration.Configuration.AppUrl@Url.Action("Manage", new { friendId = friend.Id })" role="button" class="btn btn-success">

然后让你的行动方法像

public ActionResult Manage(string friendId, FacebookContext context)
{
    var friend = await context.Client.GetFacebookObjectAsync<MyAppUserFriend>(friendId);
    // var user = await context.Client.GetCurrentUserAsync<Models.MyAppUser>();
    if (MyDALFunction.GetUserByMail(friend.Email) == null) {
        // Create user functions, create a ViewModel, pass it on and do some editing.
    }
    return View(user);
}
公共操作结果管理(字符串friendId、FacebookContext上下文) { var friend=await context.Client.GetFacebookObjectAsync(friendId); //var user=await context.Client.GetCurrentUserAsync(); if(MyDALFunction.GetUserByMail(friend.Email)==null){ //创建用户函数、创建ViewModel、传递它并进行一些编辑。 } 返回视图(用户); }
但请确保您的MyAppUserFriend模型具有电子邮件属性。。
如果您还需要其他产品,请提供您的型号和视图的详细信息

我就是这样解决的:

首先,在Home Controller中,我将访问令牌保存到TempData

    public async Task<ActionResult> Index(FacebookContext context)
    {
        if (ModelState.IsValid)
        {
            this.TempData["accessToken"] = context.AccessToken;
你可以阅读电子邮件,而不是“id”

编辑: 从
TempData
检索accessToken时,当我试图在另一个控制器中执行此操作时,返回了
null
。最好将其存储在
会话中


非常感谢。我放弃了使用该框架,但这可能对其他人有用。谢谢非常感谢你,潘卡吉。
        var accessToken = TempData["accessToken"] as string;
        if (string.IsNullOrEmpty(accessToken))
        {
            //if access token is null or user is not logged in, redirect to home controller
            return RedirectToAction("Index", "Home");
        }
        else
        {
            var fb = new Facebook.FacebookClient(accessToken);
            var me = fb.Get("me") as Facebook.JsonObject;  //current logged user
            var userFacebookId = me["id"].ToString();