如何将当前用户从Api层传递到服务层



在WebApi中,我可以通过获得使用AspIdentity的当前用户

User.Identity.GetUserId<long>();

然而,服务层并不知道AspIdentity。我不想将当前用户作为所有方法的参数。

换句话说,我可以使用什么模式来获取我想要的任何位置的当前用户。

这样做的原因是记录当前用户在应用程序中进行的所有活动。

API是无状态的,您可以使用当前登录的用户,但您可能有第三方应用程序访问您的API。因为它是无状态的,所以当前用户的处理方式与标准web调用不同。

长话短说:无论您如何验证API用户,都需要将用户名/userID传递到服务层。好消息是,一旦设置好了,就可以对API和非API调用使用相同的服务层方法。

最后这就是我实现它的方式

在框架层(一个独立于社区的项目)中,我添加了以下内容:

public interface ICurrentContextProvider<T>
{
    T GetCurrentUser();      
}

在API中,我添加了这个接口的实现,类似于:

public  ApplicationUser GetCurrentUser()
{
     return _usersService.FindByIdAsync(Convert.ToInt64(HttpContext.Current.User.Identity.GetUserId())).Result;
}

正如所有其他层都知道的框架层一样,我可以在任何地方调用它,而无需引用AspIdentity,也无需将当前用户传递给我的所有函数。

注意:由于以下原因,我将其设为泛型:1-Framework(公共层)不了解应用程序用户2-我可以从上下文中获得任何其他类型,比如ApplicationUserId,它是Long。

相关内容

  • 没有找到相关文章

最新更新