C#MVC4 windows用户名和cookie问题

时间:2013-01-25 18:46:03

标签: c# asp.net-mvc httpcookie

首先,我很伤心地说,我不知道该代码是否应该在_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用户名,我似乎无法做到。提前感谢您提供的任何帮助。

请注意,上述名称并非实际 - 仅作为示例。

1 个答案:

答案 0 :(得分:2)

如果他们在域中,您是否可以使用以下内容来检索该信息?

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

WindowsPrincipal principal = (WindowsPrincipal)Thread.CurrentPrincipal;
WindowsIdentity identity = (WindowsIdentity)principal.Identity;

String userName= principal.Identity.Name;