У меня есть простой сервис для хранения информации о пользователе после входа в систему:
Код: Выделить всё
public class UserService
{
private string _username = string.Empty;
public string Username => _username;
public bool IsAuthenticated => !string.IsNullOrEmpty(_username);
public void SetUser(string username)
{
_username = username;
}
public void ClearUser()
{
_username = "";
}
}
Код: Выделить всё
public class TestService
{
private string Username { get; set; }
public TestService(UserService userService)
{
Username = userService.Username; provider.GetRequiredService());
builder.Services.AddAuthorizationCore();
var app = builder.Build();
app.UseSession();
app.UseHttpsRedirection();
app.UseStaticFiles(); ;
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseAntiforgery();
app.MapControllers();
app.MapRazorPages();
app.MapRazorComponents().AddInteractiveServerRenderMode();
app.Run();
Только в конструкторе службы имя пользователя пусто.
Я использую VS2022, и приложение позже также будет работать под IIS.
Чего мне не хватает?
Обновление от 15.10.2024:
Я загрузил минимальный воспроизводимый пример на Google Диск. Не стесняйтесь загрузить его, чтобы воспроизвести проблему:
Runnable MRE
Обновление от 16.10.2024: если я вместо этого использую IHttpContextAccessor в TestService, оно работает (по крайней мере, в Dev ):
Код: Выделить всё
public class TestService
{
public string Username { get; set; }
public TestService(IHttpContextAccessor httpContextAccessor)
{
Username = httpContextAccessor.HttpContext?.User?.Identity?.Name ?? "unknown";
}
//public TestService(UserService userService)
//{
// Username = userService.Username;
//}
}
Любые идеи о том, как получить это работает при размещении внутри IIS?
Подробнее здесь: https://stackoverflow.com/questions/790 ... mpty-state
Мобильная версия