我是MS网络应用的新手......
Visual Studio 2015 - ASP.NET MVC 5.2.3
我在网上找到了许多适用于较旧的MVC应用程序的解决方案,但我无法工作。特别是这一个: How do I get the full name of a user in .net MVC 3 intranet app? 该解决方案应该在MVC 5中运行吗?
我添加了对System.DirectoryServices.AccountManagement的引用,并将本地副本设置为true。
我在HomeController中有这个:
public string firstName;
public string lastName;
public ActionResult Index()
{
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "MFAD"))
{
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, User.Identity.Name);
firstName = user.GivenName;
lastName = user.Surname;
}
return View();
}
如何添加助手? 我希望所有页面都显示该名称,我是否在__Layout.cshtml中实现了这个?
答案 0 :(得分:1)
好吧,如果你想在你的所有页面上显示名称,我认为在你的所有页面上进行数据库调用(这是剃须刀助手所做的)是一个相当糟糕的主意。
而且我也不喜欢剃须助手来做db调用......
您应该在成功登录后执行此查询(我猜您有登录和注销操作),并将该值存储在会话中。
类似的东西。
public ActionResult Login(...) {
//check if the login is correct, if yes
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "MFAD"))
{
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, User.Identity.Name);
firstName = user.GivenName;
lastName = user.Surname;
HttpContext.Current.Session["currentUser"] = firstName + " " + lastName;
}
您可以在_Layout.cshtml中使用HttpContext.Current.Session["currentUser"]
,并进行一些空检查。
当然,在你的LogOut方法中,你也应该做一个
HttpContext.Current.Session["currentUser"] = null;
答案 1 :(得分:0)
将对System.DirectoryServices.AccountManagement的引用添加到您的项目中并像这样执行...
using System.DirectoryServices.AccountManagement;
public ActionResult Index()
{
UserPrincipal userPrincipal = UserPrincipal.Current;
var name = userPrincipal.GivenName + " " + userPrincipal.Surname;
return View();
}