ASP.NET控制器基类User.Identity.Name

时间:2009-01-08 21:41:07

标签: c# asp.net-mvc controller master-pages abstract-class

this post中所述,我创建了一个抽象的基本控制器类,以便能够将数据从控制器传递到master.page。在这种情况下,我想在我的数据库中查找用户,查询User.Identity.Name(仅当他登录时)。

但是,我注意到在这个抽象基类中,User属性始终是null。我需要做些什么来实现这个目标?

非常感谢

5 个答案:

答案 0 :(得分:7)

正如Paco建议的那样,在您尝试使用它之前,viewdata尚未初始化。

尝试覆盖Controller.Initialize():

public abstract class ApplicationController : Controller
{
    private IUserRepository _repUser;

    public ApplicationController()
    {
    }

    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        base.Initialize(requestContext);

        _repUser = RepositoryFactory.getUserRepository();
        var loggedInUser = _repUser.FindById(User.Identity.Name);
        ViewData["LoggedInUser"] = loggedInUser;
    }
}

答案 1 :(得分:3)

要使用该用户,您应该从

获取当前页面
HttpContext.Current.User.Identity.Name

答案 2 :(得分:1)

通过在web.config中将身份验证设置为Windows,您可以使用User.Identity.Name获取用户

答案 3 :(得分:0)

我在静态Utlilites类上使用Page类。像那样;

Page P =(Page)HttpContext.Current.Handler;

我可以通过P对象获取当前请求页面的所有属性..

答案 4 :(得分:0)

你试过这个: ControllerContext.HttpContext.Current.User.Identity.Name?