HttpContext.Current.User.Identity.Name如何知道存在哪些用户名?

这不一定是一个问题,我只是好奇它是如何工作的。 我有一个方法:

public static bool UserIsAuthenticated() { bool isAuthed = false; try { if (HttpContext.Current.User.Identity.Name != null) { if (HttpContext.Current.User.Identity.Name.Length != 0) { FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity; FormsAuthenticationTicket ticket = id.Ticket; isAuthed = true; string MyUserData = ticket.UserData; } } } catch { } // not authed return isAuthed; } 

如果用户不存在, HttpContext.Current.User.Identity.Name将返回null ,但它如何知道哪些用户名存在或不存在?

HttpContext.Current.User.Identity.Name返回null

这取决于您的web.config文件中的身份validation模式是设置为Forms还是Windows

例如,如果我像这样编写身份validation:

  

然后因为身份validation模式=“表单”,我将为用户名获取null。 但是,如果我将身份validation模式更改为Windows,如下所示:

  

我可以再次运行该应用程序并检查用户名,我将成功获取用户名。

有关更多信息,请参见ASP.NET中的System.Web.HttpContext.Current.User.Identity.Name与System.Environment.UserName 。

用于Windows身份validation

选择你的项目。

按F4

禁用“匿名身份validation”并启用“Windows身份validation”

在此处输入图像描述

还检查一下

    

如果你发现这样的东西,只需删除:

  

来自web.config的行,在这里你去它将工作正常我已经测试过它。

假设“用户”(也就是您)必须登录的网络环境。 通常这是用户ID(UID)和密码(PW)。 那么,你的身份是什么,或者你是谁? 您是UID,这可以从您的登录会话中“命名”。 简单! 它也应该在需要您登录的互联网应用程序中工作,例如Best Buy和其他人。

当我打开我需要使用的Web应用程序的默认页面时,这将从我的会话中拉出我的UID或“名称”。 现在,在我的实例中,我是域的一部分,所以我可以使用初始Windows身份validation,它需要validation我是谁,因此代码的第二部分。 至于表单身份validation,它将依赖于发送到您的工作站/计算机的票证(最有可能是cookie)。 代码看起来像:

 string id = HttpContext.Current.User.Identity.Name; // Strip the domain off of the result id = id.Substring(id.LastIndexOf(@"\", StringComparison.InvariantCulture) + 1); 

现在它有我的公司名称(又名UID),可以在屏幕上显示。

[HttpContext.Current.User]如何知道哪些用户名存在或不存在?

让我们看一下这种方法的一个例子。 假设您正在使用表单身份validation并触发“OnAuthenticate”事件。 “ 当应用程序validation当前请求时 ”( 参考源 )发生此事件。

到目前为止,应用程序根本不知道你是谁。

由于您使用的是表单身份validation,因此首先通过调用ExtractTicketFromCookie来解析身份validationcookie(通常为.ASPAUTH )。 这称为FormsAuthentication.Decrypt (此方法是公共的;您可以自己调用它!)。 接下来,它调用Context.SetPrincipalNoDemand ,将cookie转换为用户并将其填充到Context.User ( Reference Source )中。