如何使用User.Identity.Name
在Controller之外的类中工作?
我只是在课内使用
private readonly static string sLogon = HttpContext.Current.User.Identity.Name.Substring(HttpContext.Current.User.Identity.Name.LastIndexOf(@"\") + 1);
它重新启动IIS 7.5生产服务器上的空引用,即使它适用于开发服务器。
在这里,我使用了一些替代方案。
Environment.Username
。哪个在开发中很有效。但不是在出版后。因为Environment.Username
会生成应用程序运行的应用程序池的名称。如上所述here。 Controller.User.Identity.Name
用于在控制器中获取所需的用户名,适用于发布前和发布后。但它不能在Class .cs的上下文中使用。 System.Web.HttpContext.Current.User.Identity.Name
产生空引用。 System.Security.Principal.WindowsIdentity.GetCurrent().Name
与Environment.Username
您对如何使用它有什么想法吗?感谢
更新
根据环境,如果我获得登录ID,我可以从Employee表中获取员工信息,如EmployeeID,Email等。例如:我有一个类(在控制器之外)从Employee表中获取员工ID以便像这样访问。
string EmployeeID = new EmployeeService().EmployeeID();
private readonly static string sLogon = HttpContext.Current.User.Identity.Name.Substring(HttpContext.Current.User.Identity.Name.LastIndexOf(@"\") + 1);
public string EmployeeID()
{
var employee = new Common().Employee();
string sID = (from e in employee
where (e.LogonID ?? "N/A").ToLower().Contains(sLogon.ToLower())
select e.EmployeeID).FirstOrDefault();
return sID;
}
答案 0 :(得分:0)
根据反映的代码,在Windows身份验证OnAuthenticate事件期间设置HttpContext.Current.User。
// System.Web.Security.WindowsAuthenticationModule
private void OnAuthenticate(WindowsAuthenticationEventArgs e)
{
if (this._eventHandler != null)
{
this._eventHandler(this, e);
}
if (e.Context.User == null)
{
if (e.User != null)
{
e.Context.User = e.User;
return;
}
if (e.Identity == WindowsAuthenticationModule.AnonymousIdentity)
{
e.Context.SetPrincipalNoDemand(WindowsAuthenticationModule.AnonymousPrincipal, false);
return;
}
e.Context.SetPrincipalNoDemand(new WindowsPrincipal(e.Identity), false);
}
}
可能需要检查生产服务器上是否启用了Windows身份验证并禁用了匿名身份验证。
http://technet.microsoft.com/en-us/library/cc754628(v=WS.10).aspx