【问题标题】:Mvc5 HttpContext return nullMvc5 HttpContext 返回 null
【发布时间】:2015-03-29 22:45:04
【问题描述】:

我有 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,解决办法是什么。

谢谢。

【问题讨论】:

  • 你能说明你是如何从另一个控制器调用AccountController的SignInAsync方法的吗?
  • 你想在这里达到什么目的?
  • 好的,我编辑。 @MonkeyCoder
  • 我在 facebook 回调 @RajdeepDosanjh 后尝试登录

标签: c# .net asp.net-mvc-5 asp.net-identity owin


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-11-18
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2018-10-10
    • 2017-03-09
    • 2021-05-08
    相关资源
    最近更新 更多