1

我对 FormsAuthentication 的概念很陌生,并且正在努力解决一些问题。

我有一个 MVC4 项目 MyApp.Web,它有一个带有 Login 方法的 AccountController:

public ActionResult Login(LoginModel model, string returnUrl)
{
    string siteName = ConfigurationManager.AppSettings["siteName"];

    if (ModelState.IsValid && MembershipService.Login(model.UserName, model.Password, siteName))
    {
        return RedirectToAction("Main", "Home");
    }
}

MembershipService 在另一个项目中(类库)

public bool Login(string username, string password, string site)
{

    // ....
    // do the validation, set up my ClaimsPrincipal and create a FormsAuthenticationTicket,
    // which is stored in the Cookies collection

    // now, we can save the ClaimsPrincipal to the relevant place
    if (HttpContext.Current != null && HttpContext.Current.User != null)
        HttpContext.Current.User = claimsPrincipal;
    else if (Thread.CurrentPrincipal != null)
        Thread.CurrentPrincipal = claimsPrincipal;   

    return success;
}

这一切似乎都很完美,我根据需要进行了验证,创建并存储了 ClaimsPrincipal。

我的问题是,当我被重定向到 MyApp.Web 时,回到 HomeController 并在 Main 方法中放置了一个断点, HttpContext.Current 与我在 Membership 项目中的断点不同;我在 Login 方法中设置的值都没有保留。

所以,简单地说,我如何确保它们是相同的,并且在一个项目中的 HttpContext.Current 上设置值会传递到我在同一解决方案中可能拥有的任何其他项目?

谢谢

4

0 回答 0