在我的asp.net核心Web API中,我想访问控制器中的变量。该变量将在GetAllStudents方法运行时设置。 StudentController和StudentRepository在同一解决方案中,但项目不同。如何从StudentRepository.cs访问StudentController.cs中的变量?有一些针对MVC的解决方案,但找不到Web API。因此,问题是不重复。
StudentController.cs:
int requestedUserId;
[HttpGet("GetAllStudents")]
public async Task<ServiceResult>GetAllStudents()
{
requestedUserId= context.HttpContext.Request.Headers["Authorization"];
return await (studentService.GetAllStudents(requestedUserId));
}
StudentService.cs:
public async Task<ServiceResult> GetAllStudents()
{
return await unitOfWork.studentRepo.GetAllStudents();
}
StudentRepository.cs:
public async Task<List<Student>> GetAllStudents()
{
?????var requestedUserId= StudentController.requestedUserId;?????
LogOperation(requestedUserId);
return context.Students.ToList();
}
答案 0 :(得分:1)
您可以将其传递进来。
GetAllStudents(int userId)
更新:
回复:谢谢您的答复。但是此变量在每个控制器中的每种方法中都使用。所以我不想到处写(int userId)。
您应该将其传递给需要它的每个方法:
var requestedUserId= StudentController.requestedUserId;?????
答案 1 :(得分:0)
我找到了解决方案。解决方案是“ IHttpContextAccessor”。您可以通过依赖项注入来注入,然后可以在任何地方使用(例如dbcontext类)
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();
}
}