繁体   English   中英

在哪里可以将用户信息存储在.net核心API项目中(使用angular

[英]where can be stored user info in .net core API project with angular

我有一个项目,我正在使用.net core 2.o Web API。 我将用户信息存储在Jwt中,我想记录每个数据库操作。 我可以通过发送jwt并从服务器端的request.header中获取用户信息。 但是问题是,可以在哪里存储? 在我以前的MVC项目中,我可以存储在会话中。 但是这个项目是API。 而且我们使用JWT而不是会话。 我如何在请求开始到结束期间实现该存储UserInfo。 我想从任何地方访问UserInfo。 这是我的actionFilter:

 public class TestFilterAttribute : System.Web.Http.Filters.FilterAttribute, IActionFilter
    {
        public void OnActionExecuting(ActionExecutingContext context)
        {
            var requestedUserInfo= context.HttpContext.Request.Headers["Authorization"];
            ??????????????? = requestedUserInfo;
        }
        public void OnActionExecuted(ActionExecutedContext context)
        {
        }
    }

我的架构是这样的:
Contoller =>服务=>存储库。 因此,我必须在所有方法中将参数作为UserInfo发送。 因此,我不想将所有方法参数都添加为UserInfo。 所以,我想学习摆脱这个问题。

MyController.cs

 [HttpGet("GetAllStudents")]
 public async Task<ServiceResult>GetAllStudents()
    {
        var requestedUserId= context.HttpContext.Request.Headers["Authorization"];
        return await (studentService.GetAllStudents(requestedUserId));
    }

我的service.cs

 public async Task<ServiceResult> GetAllStudents(int requestedUserId)
    {
        return await unitOfWork.studentRepo.GetAllStudents(requestedUserId);
    }

我的repository.cs

public async Task<List<Student>> GetAllStudents(int requestedUserId)
        {
          LogOperation(requestedUserId);
          return context.Students.ToList();
        }

您可以看到,每个方法都发送requestedUserId。 我该如何摆脱呢?

您不需要存储它,Angular必须在每个请求中发送JWT,而Asp.Net Core webapi必须打开它,对其进行验证,然后从中读取发出请求的用户。

我找到了解决方案。 我们的用户信息已经存储在HttpContext中。 我正在寻找“ HttpContextAccessor ”。 您可以通过依赖项注入来注入,然后可以在任何地方使用(例如dbcontext类或repo类)

public class StudentService : IStudentService
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public StudentService(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

public async Task<List<Student>> GetAllStudents()
    {
        var requestedUserId= _httpContextAccessor.HttpContext.Headers["Authorization"];
        LogOperation(requestedUserId);
        return context.Students.ToList();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM