Хорошо! Есть проблема. User
ClaimPrinciple
доступно только в контексте Controller
. Я вижу, что ваш ControllerNameProcessing
не Controller
класс. Таким образом, вы должны сделать следующее:
public class ControllerNameProcessing
{
private readonly IHttpContextAccessor _httpContextAccessor;
public ControllerNameProcessing(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
private async Task<List<2ndClassNameRepository>> GetNameFromRepo()
{
// Omitted your other codes for brevity
var userName = _httpContextAccessor.HttpContext.User.FindFirstValue(ClaimTypes.Name);
// Omitted your other codes for brevity
}
}
Затем вы должны зарегистрировать IHttpContextAccessor
в классе Startup
следующим образом:
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpContextAccessor();
}
Теперь в вашем контроллере:
[ApiController]
[Route("api/[controller]/[action]")]
public class ClassNameController : ControllerBase
{
private readonly ILogger<ClassNameController> _logger;
private OtherClassNameProcessing _otherClassNameProcessing;
public ClassNameController(ILogger<ClassNameController> logger, OtherClassNameProcessing otherClassNameProcessing)
{
_logger = logger;
_otherClassNameProcessing = otherClassNameProcessing;
}
[HttpGet]
[ProducesResponseType(typeof(List<2ndOtherClassNameRepository>), StatusCodes.Status200OK)]
public IActionResult GetUserName()
{
var data = proc.GetUserName();
return Ok(data.Result);
}
}
Тогда вам нужно зарегистрировать OtherClassNameProcessing
в классе Startup
следующим образом:
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpContextAccessor();
services.AddScoped<OtherClassNameProcessing>();
}