Итак, теперь у меня есть следующее
Код: Выделить всё
public class ClaimsProvider : IClaimsProvider
{
private readonly IHttpContextAccessor _httpContextAccessor;
public ClaimsProvider(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public ClaimsPrincipal? GetClaimsPrincipal()
{
return _httpContextAccessor.HttpContext?.User;
}
}
public interface IClaimsProvider
{
ClaimsPrincipal? GetClaimsPrincipal();
}
builder.Services.AddScoped(provider =>
{
var httpContextAccessor = provider.GetRequiredService();
return new ClaimsProvider(httpContextAccessor);
});
< /code>
и обычный маршрут для моих услуг, где я вводит его как зависимость < /p>
private readonly IClaimsProvider _claimsProvider;
public SomeService(
IWebHostEnvironment hostingEnvironment,
IMapper mapper, IClaimsProvider claimsProvider, ...)
{
_hostingEnvironment = hostingEnvironment ??
throw new ArgumentNullException(nameof(hostingEnvironment));
_mapper = mapper ??
throw new ArgumentNullException(nameof(mapper));
_claimsProvider = claimsProvider;
}
public void SomeMethod()
{
var u = _claimsProvider.GetClaimsPrincipal();
foreach (var claim in u.Claims)
{
Console.WriteLine($"{claim.Type} : {claim.Value}");
}
}
< /code>
Мой вопрос в том, что это приведенный выше подход, хорошо? Потенциально, есть ли другой подход, который лучше, чем показанный выше?
Подробнее здесь: https://stackoverflow.com/questions/751 ... core-6-app