如何完全自定义默认 ASP .Net Core Identity 页面?

How do I fully customise the default ASP .Net Core Identity pages?

我目前正在尝试学习和理解 .Net Core 2.1/MVC 中所有新的 Identity 点点滴滴。以前,我使用过 MVC3 MVC Identity,它很简单 - 它会自动创建模型、视图和控制器,我可以轻松编辑所有内容。

使用 .Net Core,它似乎自动继承了框架的所有内容,我只是不容易理解如何覆盖。

我已经按照指南 located here 进行了操作,并成功构建了所有页面(例如创建用户、重设密码、登录),但是,这并没有创建任何模型或控制器。

正因为如此,我现在有了一个包含所有页面的项目,但是,由于缺少所有模型,它无法构建:

CS0246  The type or namespace name 'ChangePasswordModel' could not be found (are you missing a using directive or an assembly reference?

我觉得我遗漏了一些明显的东西,我不敢相信我在 10 年前很简单的事情上付出了如此多的努力。

如何create/import 丢失的控制器和模型?

Identity 带有默认 UI,由 Razor 页面和位于 Razor Class 库中的静态文件组成。当您使用 AddDefaultIdentity 在项目中启用 Identity 或在任何其他身份引导扩展方法 (AddIdentity/AddIdentityCore) 上显式调用 AddDefaultUI 时,默认情况下会添加它。

Razor 中的视图和静态文件 Class 库是嵌入式资源,因此被视为直接存在于引用它们的应用程序中。但是,应用程序中实际存在的任何内容都将在任何嵌入式资源之前使用。因此,您可以覆盖来自 RCL 的任何内容,只需在应用中 RCL 中存在的相同位置创建相同的文件即可。 Identity 脚手架只是将选定的 Razor 页面复制到您的项目中,这样它们就会以这种方式覆盖。

由于默认使用 Razor Pages UI,因此没有控制器或单独的模型 类。用于视图的模型是在 Razor 页面代码隐藏中建立的,因此对于您搭建的每个页面,您应该添加 Page.cshtmlPage.cshtml.cs 文件。

如果您的构建在执行脚手架后失败,则构建没有看到 *.cshtml.cs 文件(代码隐藏)。验证它们确实存在于您的项目文件结构中。如果他们不这样做,则您的 Visual Studio 实例中的脚手架存在一些基本问题,可能需要重新安装或至少修复 Visual Studio.

假设它们在那里,那么构建过程中就会出现问题。有时文件确实被锁定并且 Visual Studio 会抱怨它缺少引用,而实际上它只是缺少那些来自的程序集。在这种情况下,您可以直接导航到您的项目并完全删除 binobj 目录。然后,返回 Visual Studio 并进行重建。如果您有多个项目,您应该重建整个解决方案,因为它可能是一个实际无法构建的项目参考。