Пользователь.Исключение нулевого указателя идентификатора с помощью шаблона SPA (Angular) visual studio angular

#c# #asp.net #asp.net-core #asp.net-identity #visual-studio-templates

#c# #asp.net #asp.net-ядро #asp.net-identity #visual-studio-templates

Вопрос:

Я использую шаблон Visual studio angular для создания проекта, пытаясь получить доступ к утверждениям пользователя User.Identity.Name . Поскольку пользователь имеет значение null, поэтому возникает исключение нулевого указателя.

Я следовал инструкциям отсюда https://learn.microsoft.com/en-us/aspnet/core/security/authentication/identity-api-authorization?view=aspnetcore-3.1

который использует AddApiAuthorization, AddIdentityServerJwt, OidcConfigurationController

 Startup.cs

services.AddIdentityServer()
                .AddApiAuthorization<ApplicationUser, ApplicationDbContext>()
                .AddProfileService<ProfileService>();
            
            services.AddAuthentication()
                .AddIdentityServerJwt();

 app.UseAuthentication();
            app.UseIdentityServer();
            app.UseAuthorization();

 app.UseSpa(spa =>
            {
                spa.Options.SourcePath = "ClientApp";
                if (env.IsDevelopment())
                {
                    spa.UseAngularCliServer(npmScript: "start");
                }
            });
  

В базовом контроллере я пытаюсь получить доступ к утверждению пользователя

     [Authorize]
    public abstract class BaseController : ControllerBase
        {
           
            private readonly UserManager<ApplicationUser> _userManager;
            public BaseController()
            {
var identity = HttpContext.User.Identity as ClaimsIdentity;
                var user =  _userManager.FindByNameAsync(User.Identity.Name).Resu<
                
            }
        }
  

Пользователь имеет значение null после успешного входа с сервера идентификации. Базовый контроллер, украшенный [Authorize] точкой останова, работает после авторизации

введите описание изображения здесь

Ответ №1:

Значение null не у пользователя, а у HttpContext.

В конструкторе вызывается HttpContext, а затем экземпляр HttpContext еще не создан, поскольку это происходит, когда клиент подключается к этому контроллеру. Переместите свой код внутри метода в контроллере, и вы обнаружите, что установлен HttpContext .