首先,我很伤心地说,我不知道该代码是否应该在_Layout.cshtml或控制器中的某个地方。它需要在所有页面上运行,所以我把它放在_Layout.cshtml页面中。
这适用于Intranet Web应用程序。我正在尝试做的是:如果找不到cookie(持有用户的用户ID),获取windows用户名,通过将进入数据库的类运行并获取相应用户的用户名,并且 - 如果我们获取用户ID - 制作包含它的cookie。听起来不太难,但特别是一条线,以及它的各种化身,都拒绝支持。这是整个代码。
if(!Context.Response.Cookies.AllKeys.Contains("userid")){
var winuser = System.Web.HttpContext.Current.User.Identity.Name;
var winuserid = myprojectname.Models.MyIntranetDataContext.getUserId(winuser).UserID();
if (winuserid == null) {
Response.Redirect("/someotherpage");
} else {
HttpCookie cookieuser = new HttpCookie("userid");
DateTime now = DateTime.Now;
cookieuser.Value = winuserid;
cookieuser.Expires = now.AddMonths(1);
Response.Cookies.Add(cookieuser);
}
}
第2行 - var winuser ... - 出现是问题所在。在当前的版本中,我遇到了构建错误:非静态字段,方法或属性'myprojectname.Models.MyIntranetDataContext.getUserId(string)'
需要对象引用当我向它添加.ToString时,它不喜欢它。
我也尝试过使用winuser:
Page.User.Identity.Name;
这没有给出构建错误。当我尝试启动调试时,她发现了一个错误之处:'无法对空引用执行运行时绑定'
一旦我获得了Windows用户名,一切都会好的。
真的,这不是关于cookie,甚至是mvc到很大程度上(除了可以指导放置此代码的地方 - _Layout.cshtml?)。真的是关于获取Windows用户名,我似乎无法做到。提前感谢您提供的任何帮助。
请注意,上述名称并非实际 - 仅作为示例。
答案 0 :(得分:2)
如果他们在域中,您是否可以使用以下内容来检索该信息?
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
WindowsPrincipal principal = (WindowsPrincipal)Thread.CurrentPrincipal;
WindowsIdentity identity = (WindowsIdentity)principal.Identity;
String userName= principal.Identity.Name;