Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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#.NET核心获取当前用户ID的最佳方法_C#_.net_Asp.net Core_Identity - Fatal编程技术网

C#.NET核心获取当前用户ID的最佳方法

C#.NET核心获取当前用户ID的最佳方法,c#,.net,asp.net-core,identity,C#,.net,Asp.net Core,Identity,我的数据库中有很多表使用用户的标识user.Id作为外键。现在,在许多请求中,我需要执行以下几行操作,以防用户为空(即使我在函数中添加了[authorize]过滤器) 是否有人知道在不为每个函数复制相同代码的情况下访问此函数的最佳方法 我想我可以有一个函数来检索Id。。。并在Null上引发异常。。但无论如何,我仍然需要在每次尝试捕捉中写下它 有什么想法吗?用户id是一种声明。您可以通过以下途径获得: var userId = User.FindFirstValue(ClaimTypes.Name

我的数据库中有很多表使用用户的标识user.Id作为外键。现在,在许多请求中,我需要执行以下几行操作,以防用户为空(即使我在函数中添加了[authorize]过滤器)

是否有人知道在不为每个函数复制相同代码的情况下访问此函数的最佳方法

我想我可以有一个函数来检索Id。。。并在Null上引发异常。。但无论如何,我仍然需要在每次尝试捕捉中写下它


有什么想法吗?

用户id是一种声明。您可以通过以下途径获得:

var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);

注意:您需要添加一个using for
System.Security.Claims

在WebApi 2中,您可以从ApicController上的方法中使用RequestContext.Principal

string id;
id = User.Identity.GetUserId();
id = RequestContext.Principal.Identity.GetUserId();

是不是有点像
HttpContext.Current.User.Identity
?@Hogan,AFAIK在Asp.net核心中没有“HttpContext.Current”。@PoulBak——可能是在web内容中。但是这比var User=wait_userManager.GetUserAsync(User)好吗;我是否仍然需要执行检查以查看userId是否为null或无效?否。从技术上讲,您也不需要使用
GetUserAsync
进行检查。如果这是在授权端点之后,那么用户必须存在,否则他们将无法登录。我想这是有可能的东西,如用户登录,然后有他们的用户记录删除以下,但这将是奇怪的说,至少。不过,索赔更可靠,因为它们与实际登录的主体相关。只要用户登录,声明就会被设置,不管在数据库级别发生什么。嗯,他们在示例应用程序中执行这种空检查是很奇怪的,即使是在授权的过滤器后面。。。。知道它在检查时是否仍然命中数据库还是只是读取客户机的cookie数据吗?无论何时查询数据库,最好假设您的查询可能与任何内容都不匹配。尽管如此,很明显它会回报一些东西,但过度谨慎肯定没有坏处。但是,当您访问用户主体上的声明时,您并没有访问数据库。那些存在于记忆中。
string id;
id = User.Identity.GetUserId();
id = RequestContext.Principal.Identity.GetUserId();