我如何使用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
. 这在开发中效果很好。但不是在发布之后。因为 then 会Environment.Username
产生应用程序在其中运行的应用程序池的名称。如此处所述。 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 表中获取 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;
}