0

首先,我很遗憾地说我不确定这段代码应该在 _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 用户名,我似乎无法做到。提前感谢您提供的任何帮助。

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

4

1 回答 1

2

如果他们在域上,您不能使用类似以下的内容来检索该信息吗?

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

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

String userName= principal.Identity.Name;
于 2013-01-25T18:54:48.743 回答