Это мое решение для перемещения кода Identity Scaffolding .
Я пытаюсь использовать Очистить архитектуру в преобразовании .Net Framework MVC / APIИдентификационный сайт для сайта MVC Core 2.2. Мое вдохновение пришло из следующего видео: Чистая архитектура с ASP.NET Core 2.2 - Джейсон Тейлор
Моя версия структуры каталогов выглядит следующим образом:
\+- Application
| +- Commands
+- Domain
| +- Entities
+- Infrastructure
+- UI
+- Identity
| +- Pages
| +- Account
| ...
+- Controllers
+- ViewHelpers
+- ViewModels
+- View
+- Company
...
+- Shared
В моем приложении я изменил классы IdentityUser и IdentityRole , а каталог Scaffolding Identity не соответствует приведенному выше. К сожалению, я не смог найти пример того, как обрабатывать каталог Identity по умолчанию.
Мое решение состояло в том, чтобы создать Идентификатор скаффолдинга и преобразовать из области в формат страницы . Это процесс, который требует много поиска и замены и чреват проблемами.
Первый шаг - создание структуры каталогов. Следующим шагом является создание Идентификатор лесов . Существует множество инструкций, но у меня работает документация Microsoft . Вы должны получить это работает в первую очередь, прежде чем перемещать папку! Чтобы заставить Identity работать, вам нужно найти и заменить UserManager и SignInManager . Выполните окончательный поиск (только) для IdentityUser и вручную исправьте страницу DownloadPersonalDataModel.
Добавьте оператор using на страницы бритвы, которые ссылаются на ApplicationUser:
, используя.Domain.Entities;
и _LoginPartial
@ с использованием .Domain.Entities
Test it.
Перетащите папку Controllers / Views / Models в папку пользовательского интерфейса. Я переименовал Модели в ViewModels (необязательно). Поиск и замена пространств имен на новые пространства имен.
- .Controllers -> .UI.Controllers
- .Models -> .UI.ViewModels (в _ViewImports.cshtml)
- / Views / Shared / -> / UI / Views / Shared /
Добавьте параметры движка Razor View для поиска нового пути пользовательского интерфейса для вида / страницы / области следующим образом:
services.Configure<RazorViewEngineOptions>(o =>
{
// {2} is area, {1} is controller,{0} is the action
o.ViewLocationFormats.Clear();
o.ViewLocationFormats.Add("/UI/Views/{1}/{0}" + RazorViewEngine.ViewExtension);
o.ViewLocationFormats.Add("/UI/Views/Shared/{0}" + RazorViewEngine.ViewExtension);
// now razor pages
o.PageViewLocationFormats.Clear();
o.PageViewLocationFormats.Add("/UI/Views/{1}/{0}" + RazorViewEngine.ViewExtension);
o.PageViewLocationFormats.Add("/UI/Views/Shared/{0}" + RazorViewEngine.ViewExtension);
o.PageViewLocationFormats.Add("/UI/Identity/Pages/Account/Manage/{0}" + RazorViewEngine.ViewExtension);
//
o.AreaViewLocationFormats.Clear();
o.AreaViewLocationFormats.Add("/UI/Views/{1}/{0}" + RazorViewEngine.ViewExtension);
o.AreaViewLocationFormats.Add("/UI/Views/Shared/{0}" + RazorViewEngine.ViewExtension);
// now razor areas
o.AreaPageViewLocationFormats.Add("/UI/Views/{1}/{0}" + RazorViewEngine.ViewExtension);
o.AreaPageViewLocationFormats.Add("/UI/Views/Shared/{0}" + RazorViewEngine.ViewExtension);
Console.WriteLine(o);
});
Если вы получаете сообщение об ошибке «Обнаружены следующие местоположения:», Console.WriteLine, описанный выше, является отличным местом для установки точки останова, чтобы увидеть, что доступно и что установлено.
Проверка доступа к странице. Когда все чисто, вы можете перетащить папку Identity в папку ** UI *. Найдите и замените пространство имен на новое пространство имен. - .Areas.Identity -> .UI.Identity
Изменить _LoginPartial и искать и заменять области (для удаления области): - asp-area = "Identity" -> asp-area = ""
Измените параметры MVC Razor следующим образом:
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddRazorPagesOptions(options =>
{
options.AllowAreas = false;
options.Conventions.Clear();
options.RootDirectory = "/UI/Identity/Pages";
Console.WriteLine(options);
});
Измените параметры двигателя Razor View следующим образом:
services.Configure<RazorViewEngineOptions>(o =>
{
...
// now razor areas
o.AreaPageViewLocationFormats.Clear();
o.AreaPageViewLocationFormats.Add("/UI/Views/{1}/{0}" + RazorViewEngine.ViewExtension);
o.AreaPageViewLocationFormats.Add("/UI/Views/Shared/{0}" + RazorViewEngine.ViewExtension);
o.AreaPageViewLocationFormats.Add("/UI/Identity/Account/Manage/{0}" + RazorViewEngine.ViewExtension);
Console.WriteLine(o);
}
Теперь попробуйте ... путь к Личность страниц больше не / Личность / Счет , но теперь / Учетная запись