在我的asp.net核心网络应用程序中,我需要为发出请求的用户找到登录名。这是在中间件中使用来自HttpContext的名称声明完成的。
public static string GetUserName(HttpContext ctx)
{
var claim = ctx.User.FindFirst(ClaimTypes.NameIdentifier);
if (claim != null)
return claim.Value;
claim = ctx.User.FindFirst(ClaimTypes.Name);
var arr = claim?.Value.Split('\\');
return arr?[arr.Length - 1];
}
但有时 Context.User.UserClaims为空。看起来这种情况主要发生在多个请求几乎同时发生时。对于其中一些请求,索赔是空的,而有些则不是。
它永远不会发生在IIS下,但确实发生在IISExpress和HttpSys下。我希望有人知道它为什么会这样。
这是我的launch.json
{
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:5000/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"use64Bit": true
},
"HttpSys": {
"commandName": "Project",
"launchBrowser": false,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}