Mvc5 HttpContext 返回空值



我有 Mvc5 项目,我正在使用 Owin。

我从OwinContext获得身份验证,

private IAuthenticationManager AuthenticationManager
{ 
    get
    {
        return HttpContext.GetOwinContext().Authentication;
    }
}

并且AuthenticationManager使用户登录。

private async Task SignInAsync(ApplicationUser user, bool isPersistent)
{
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
    var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
    AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
    Session_Add(user);
}

这是我在HomeController中的调用。我正在尝试在回调后登录facebook

public ActionResult Index()
{
    try
    {
        if (Request.QueryString["code"] != null)
        {
            string code = Request.QueryString["code"].ToString();
            string state = "";
            string type = "";
            var fb = new FacebookController();
            var me = fb.GetUserInfo(fb.GetAccessToken(code, state, type));
            new AccountController().LookUserFromFacebook(me);
        }
        return View();
    }
    catch
    {
        return View();
    }
}

当登录表单提交给AccountController用户可以登录。但是如果我从另一个控制器调用SignInAsync方法,问题HttpContext总是返回 null。我认为,由于此调用而不是请求,因此控制器不会创建上下文。

如果我打电话给SignInAsync,解决方案是什么.

感谢。

您不能像现在这样使用控制器。 控制器是 MVC 应用程序中的端点。如果需要从 2 个不同的端点执行操作,请将该代码包装在服务类中,然后从两个控制器调用该代码。

永远不要做var controller = new AcctountController() - 这将为您提供无法正常运行的未初始化对象。最好是将控制器初始化留给框架,或者在最坏的情况下您可以使用ControllerFactory,但我非常不鼓励这样做。

相关内容

  • 没有找到相关文章

最新更新