无法为继承IdentityUser的User类搭建ASP.NET Core控制器及视图问题
为什么继承IdentityUser后User类不再出现在脚手架模型下拉列表中?
这个问题其实是ASP.NET脚手架工具的默认行为导致的,我来给你拆解一下原因和解决办法:
核心原因
ASP.NET的脚手架(不管是Visual Studio GUI里的"搭建控制器"还是命令行工具)默认会过滤掉继承自IdentityUser的类,背后的逻辑是:
- Identity体系已经提供了一套成熟的用户管理UI和控制器(比如自带的Login/Register/Manage等页面),脚手架工具默认认为这类属于Identity范畴的模型,不需要再生成常规的CRUD控制器,避免和内置的Identity功能产生冲突或重复。
- 在你修改User类之前,它是一个普通的POCO(Plain Old CLR Object)类,脚手架会把它识别为常规业务模型,自然会出现在下拉列表里;但继承
IdentityUser后,它就被归类为Identity相关类,直接被过滤掉了。
解决办法
如果你确实需要为这个User类生成自定义的控制器和视图,可以通过以下两种方式绕过这个限制:
1. 使用命令行脚手架工具(推荐)
打开项目的终端,运行dotnet aspnet-codegenerator命令来强制指定模型类,比如:
dotnet aspnet-codegenerator controller -name UsersController -m User -dc ApplicationDbContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries
参数说明:
-name:指定要生成的控制器名称-m:明确指定你的User模型类-dc:指定你的DbContext类(通常是ApplicationDbContext)- 后面的参数是配置视图布局和脚本引用的选项,按需调整即可。
2. Visual Studio GUI手动指定类名
有些版本的Visual Studio允许你在脚手架窗口的"模型类"下拉框中手动输入完整的类名(比如YourNamespace.User),而不用依赖下拉列表的选项。如果下拉框不显示,试试直接手动输入类的完全限定名,然后继续后续的脚手架配置步骤。
额外提示
生成控制器后,你可能需要根据自己的需求调整代码,比如处理IdentityUser自带的属性(如Id、UserName、Email等),避免和你自定义的FirstName/LastName等属性产生冲突。
内容的提问来源于stack exchange,提问作者Olawale david
相关产品推荐
相关产品推荐

