Principal.Identity.GetUserId<int>() return 是什么意思?
What does Principal.Identity.GetUserId<int>() return?
我遇到了以下代码,我正在尝试弄清楚它到底做了什么。
if (principal.Identity is WindowsIdentity)
{
profile = //generate a profile somehow
}
....
var userId = principal.Identity.GetUserId<int>();
这是我(认为)我理解的:
principal
是当前登录的用户
这一行:
if (principal.Identity is WindowsIdentity)
检查当前登录的用户是否为 windows 用户,例如通过 windows auth
登录
这一行是我遇到问题的那一行。
var userId = principal.Identity.GetUserId<int>();
如果我们从这里假设所有用户都是 windows 用户,那么这一行似乎是在获取用户 ID。
我不确定的部分是这是获取 windows 用户 ID,还是在我的应用程序中分配的用户 ID? windows 用户有用户 ID 吗?
我的问题是这总是 returns 0,我不知道为什么?
如果它与应用程序中的用户 ID 相关,我认为这需要映射或分配到某处,但我还是看不出如何。
一天中的大部分时间我都在处理这个问题,但是我用谷歌搜索都没有取得任何进展...
所以这是 GetUserId 扩展方法的反编译源(根据 resharper)
if (identity == null)
throw new ArgumentNullException("identity");
ClaimsIdentity identity1 = identity as ClaimsIdentity;
if (identity1 != null)
{
string firstValue = IdentityExtensions.FindFirstValue(identity1, "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier");
if (firstValue != null)
return (T) Convert.ChangeType((object) firstValue, typeof (T), (IFormatProvider) CultureInfo.InvariantCulture);
}
return default (T);
WindowsIdentity
将通过安全转换 as ClaimsIdentity
因为 it inherits from it
所以这取决于你的 windows 身份是否 contains a claim http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier
如果您得到 0,则您没有该声明
我遇到了以下代码,我正在尝试弄清楚它到底做了什么。
if (principal.Identity is WindowsIdentity)
{
profile = //generate a profile somehow
}
....
var userId = principal.Identity.GetUserId<int>();
这是我(认为)我理解的:
principal
是当前登录的用户
这一行:
if (principal.Identity is WindowsIdentity)
检查当前登录的用户是否为 windows 用户,例如通过 windows auth
登录这一行是我遇到问题的那一行。
var userId = principal.Identity.GetUserId<int>();
如果我们从这里假设所有用户都是 windows 用户,那么这一行似乎是在获取用户 ID。
我不确定的部分是这是获取 windows 用户 ID,还是在我的应用程序中分配的用户 ID? windows 用户有用户 ID 吗?
我的问题是这总是 returns 0,我不知道为什么?
如果它与应用程序中的用户 ID 相关,我认为这需要映射或分配到某处,但我还是看不出如何。
一天中的大部分时间我都在处理这个问题,但是我用谷歌搜索都没有取得任何进展...
所以这是 GetUserId 扩展方法的反编译源(根据 resharper)
if (identity == null)
throw new ArgumentNullException("identity");
ClaimsIdentity identity1 = identity as ClaimsIdentity;
if (identity1 != null)
{
string firstValue = IdentityExtensions.FindFirstValue(identity1, "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier");
if (firstValue != null)
return (T) Convert.ChangeType((object) firstValue, typeof (T), (IFormatProvider) CultureInfo.InvariantCulture);
}
return default (T);
WindowsIdentity
将通过安全转换 as ClaimsIdentity
因为 it inherits from it
所以这取决于你的 windows 身份是否 contains a claim http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier
如果您得到 0,则您没有该声明