可以使用angular

时间:2018-09-16 08:50:18

标签: angular api session asp.net-core-2.0 asp.net-core-webapi

我有一个有角度的项目,我正在使用.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。我该如何摆脱呢?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我找到了解决方案。我们的用户信息已经存储在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();
    }
}