User.Identity.GetUserId<long>();
但是,服务层不了解AspIdentity。而且我不想将当前用户作为所有方法的参数。
换句话说,我可以用什么模式让当前用户随时随地获取。
原因是记录当前用户在应用程序中执行的所有活动。
答案 0 :(得分:1)
API旨在成为无状态,您可能使用当前登录的用户,但您可能有第三方应用程序访问您的API。因为它是无状态的,所以当前用户的处理方式与标准Web调用不同。
长话短说:但是,您要对API用户进行身份验证,您需要将用户名/用户ID传递到服务层。好消息是,一旦进行了此设置,您就可以使用相同的服务层方法进行API和非API调用。
答案 1 :(得分:0)
最后,这是我实施它的方式。
在Framework Layer(一个独立于comun的项目中),我添加了这个:
public ApplicationUser GetCurrentUser()
{
return _usersService.FindByIdAsync(Convert.ToInt64(HttpContext.Current.User.Identity.GetUserId())).Result;
}
在API中我添加了此接口的实现,如:
{{1}}
由于所有其他层都知道框架层,我可以在任何地方调用它,而不需要引用AspIdentity,也不会将Current用户传递给我的所有函数。
注意:由于以下原因,我将其设为通用: 1-框架(公共层)不了解应用程序用户 2-I可以从上下文中获取任何其他类型,例如ApplicationUserId,它是Long。