首先,我很遗憾地说我不确定这段代码应该在 _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 用户名,我似乎无法做到。提前感谢您提供的任何帮助。
请注意,上述名称并非实际名称 - 仅作为示例。