0

我如何使用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;
        }
4

1 回答 1

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

于 2013-07-10T05:33:11.970 回答