System.Web.HttpContext.Current.User.Identity.Name不一致

时间:2015-07-23 23:11:43

标签: c# asp.net

在我们的项目中,我们使用System.Web.HttpContext.Current.User.Identity.Name来获取带域的UserID。对于少数页面,比如说,登录或主页或其中许多页面,它会返回带有domainName的用户名,这是

域名\用户ID

当我们想要在其中一个页面上使用Usercontrol上传文件时,它会抛出异常,因为它直接返回用户名

像哈利,伯灵顿而不是dom \ Hburlingt。

我们在Web中使用Windows身份验证模式,配置和示例代码抛出异常是

public static string GetCurrUsersLoginIdentity()
    {
        string name = "";
        if (System.Web.HttpContext.Current != null)
            name = System.Web.HttpContext.Current.User.Identity.Name;
        else
        {
            WindowsIdentity id = WindowsIdentity.GetCurrent();
            if (id != null)
                name = id.Name;
        }

        //If we still don't have a name then something is seriously wrong
        if (string.IsNullOrEmpty(name))
            throw new System.Security.Authentication.InvalidCredentialException("Coult not retrieve IDSID information for user.");

        return name;

1 个答案:

答案 0 :(得分:0)

User.IdentityWindowsIdentity.GetCurrent()是两回事:

User.Identity on MSDN会返回System.Security.Principal个对象。

WindowsIdentity.GetCurrent on MSDN会返回System.Security.Principal.IPrincipal个对象。

所以你看到两个不同的名字就不足为奇了。

BTW,您的方法GetCurrUsersLoginIdentity的名称具有误导性,因为它返回用户的名称而非身份对象本身。

此外,您的异常消息包含拼写错误:Coult not retrieve IDSID information for user.