Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 身份识别是如何实现的_C#_Extension Methods_Asp.net Identity - Fatal编程技术网

C# 身份识别是如何实现的

C# 身份识别是如何实现的,c#,extension-methods,asp.net-identity,C#,Extension Methods,Asp.net Identity,我有一个关于身份的问题,通常在web应用程序中,你可以说: HttpContext.Current.User.Identity. 它有几个属性,你可以很容易地检索,非常方便 所以我有两个问题: 1我使用的是ASP.NET标识,不是成员身份,而是尝试扩展HttpContext.Current.User.Identity public static int GetUserAge(this IIdentity identity){} 要导入:我必须使用的身份标识,使用System.Securit

我有一个关于身份的问题,通常在web应用程序中,你可以说:

 HttpContext.Current.User.Identity.
它有几个属性,你可以很容易地检索,非常方便

所以我有两个问题:

1我使用的是ASP.NET标识,不是成员身份,而是尝试扩展HttpContext.Current.User.Identity

public static int GetUserAge(this IIdentity identity){}
要导入:我必须使用的身份标识,使用System.Security.Principal;,但是它是否与Microsoft.AspNet.Identity在同一个包中

2默认情况下,方法和属性(如User.Identity.Name/User.Identity.Id、/User.Identity.GerUserId等)是如何实现的?实现是否每次都转到数据库检索它?或者它保存在会话或


因为我想创建一个扩展,并以与默认情况大致相同的方式工作…

所以AspNet.Identity只添加了扩展方法,这些扩展方法为ClaimsIdentity提供了隐藏强制类型转换身份的语法糖分,并将两种声明类型映射到helper方法getter

GetUserName() => ClaimTypes.Name
GetUserId() => ClaimTypes.NameIdentifier.

如果我没记错的话。身份是系统、安全、主体的一方。IIdentity的默认实现是在Microsoft.AspNet.Identity中。所以像Identity这样的类:IIdentity在Microsoft.AspNet.Identity中。第二个问题,我相信这取决于你的memebership提供商以及用户信息的来源。SqlAspnetMembershipProvider将运行查询以获取用户信息。如果您是web.config中的硬编码用户,那么我相信当应用程序加载时,它会将其加载到内存中。是的,它们来自数据库。这不是一个真正的答案,因为我想知道它是如何得到它的?我的意思是,它是否每次排队数据库的信息或。。。?我的意思是,如果在每个页面上我都要做.Identity.GetUserId,那么它是否会每次都去数据库获取它并显示。。。这意味着每次用户引用时,都会有到数据库的往返,用户ID存储在标识声明中,因此不需要到数据库的往返。因此,如果我想进行另一个扩展,例如检索名称,我是否也应该或多或少地以相同的方式实现它,并将用户显示名称存储在声明中?声明存储在哪里?声明从数据库生成并存储在登录cookie中。因此,您可以修改用户通过ClaimSideEntityFactory生成的声明,这些声明将显示在ClaimSideEntity中