У меня есть веб-приложение, в которое я хочу интегрировать ASP.NET Core Identity, но после добавления контроллеров и представлений и редактирования _Layout.cshtml я получаю эту ошибку:

InvalidOperationException: Служба для типа «Microsoft.AspNetCore.Identity.SignInManager`1 [StrikeNet.EntityFramework.Entities.UserIdentity]» не зарегистрирована.

Когда я ищу эту ошибку в Google или здесь, я получаю решение переименовать все экземпляры IdentityUser в имя, которое я дал, в UserIdentity. Кроме того, многие решения говорят, что я должен найти его в файле _LoginPartial.cshtml.

Проблема в том, что в моем решении нет файла с именем _LoginPartial.cshtml, и когда я использую инструмент поиска ctrl + F и ищу IdentityUser, я также не получаю результатов.

Любые идеи о том, что может быть оставшейся проблемой?

0
Pim_vh 2 Мар 2020 в 16:42

2 ответа

Лучший ответ

Я думаю, что вы забыли добавить Identity в конфигурацию Startup.cs:

services.AddIdentity<User, Role>(); // if you have roles
0
AlleXyS 2 Мар 2020 в 13:45

Проблема в том, что в моем решении нет файла с именем _LoginPartial.cshtml

Я бы посоветовал вам создать основное приложение asp.net с шаблоном Identity: Создать веб-приложение ASP.NET Core -> Изменить аутентификацию -> выбрать отдельные учетные записи пользователей. Ater Visual Studio поможет создать приложение с включенной идентификацией, вы можете проверить dbcontext, страницы и файл запуска, чтобы найти разницу с вашим существующим приложением. После копирования отсутствующих файлов вы можете создать свою пользовательскую сущность, унаследованную от IdentityUser:

public class UserIdentity: IdentityUser
{
}

Изменить ApplicationDbContext:

public class ApplicationDbContext : IdentityDbContext<UserIdentity>
{
}

Изменить запуск:

services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<UserIdentity>(options => options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<ApplicationDbContext>();

И обновите _LoginPartial:

@inject SignInManager<UserIdentity> SignInManager
@inject UserManager<UserIdentity> UserManager

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

0
Nan Yu 3 Мар 2020 в 06:19