最近发现了一个简明 ASP.NET core 的手册 Demo 教程, 传送门, 教程还是比较通俗易懂的, 按着教程进行了学习
由于使用的. net core 3.1, 按照教程进行创建 MVC 项目, 实际操作时候还是有一些问题, 遂将一些问题进行记录.
1 执行数据库变更报错, 提示 dotnet-ef 命令不存在
提示
" 无法执行, 因为找不到指定的命令或文件.
可能的原因包括:
* 你拼错了内置的 dotnet 命令.
* 你打算执行 .NET Core 程序, 但 dotnet-ef 不存在.
* 你打算运行全局工具, 但在路径上找不到名称前缀为 dotnet 的可执行文件."
执行 dotnet ef migrations 命令时, 遇到了问题, 经过查阅资料和环境配置, 发现是 3.0 dotnet-ef 的命令行工具未安装, 查阅 nuget 后, 使用 dotnet tool install --global dotnet-ef --version 3.1.1 进行安装 dotnet
2 执行 dotnet ef migrations 命令, 总是 build start build failed
问题一直查找不出来, 后来 dotnet run 发现本身代码有一个报错, 解决了代码报错之后, 重新执行后成功了
3 ApplicationUser 未定义
提示 No service for type 'Microsoft.AspNetCore.Identity.UserManager`
用户信息授权和认证参照教程使用了 ApplicationUser, 一直提示未定义, 想着是 Microsoft.AspNetCore.Identity 里封装的, 添加引用也没有生效, 后参阅 MSDN 教程说明
章节迁移 - ASP.NET 到 ASP.NET Core 看到了代码 Demo
原来是需要手动添加模型的定义, 添加 ApplicationUser 类之后, 应用 Models, 错误解决
3 账号登录错误
dotnet new mvc 默认创建的项目模板,_LoginPartial 视图中, 默认为 IdentityUser 的引用, 这里是个问题, 因此需要引入自定义的 models, 并将注入方法的用户修改为 ApplicationUser
- @using Microsoft.AspNetCore.Identity
- @using xxxx.Models
- @inject SignInManager<ApplicationUser> SignInManager
- @inject UserManager<ApplicationUser> UserManager
4 用户角色服务错误
提示 "No service for type'Microsoft.AspNetCore.Identity.RoleManager`1
这里需要修改 startup.cs, 由于未添加角色服务, 需要增加 AddRoles<IdentityRole>()
- services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true).AddRoles<IdentityRole>()
- .AddSignInManager<SignInManager<ApplicationUser>>()
- .AddEntityFrameworkStores<ApplicationDbContext>();
5 程序启动创建的管理员角色账号登录不了
页面未见提示, 一直提示登录失败, 查看代码运行的警告发现 User 77630e93-9a3c-4a72-a5d1-af2ad9a909f6 cannot sign in without a confirmed account.
因为默认使用的是邮箱登录方式, 这里需要对账号进行一次确认, 默认创建管理员账号时, 只进行了账号和角色的创建, 猜测是未确认账号的问题, 因此需要修改账号确认状态
设置 ApplicationUser 的属性 EmailConfirmed = true 问题得以解决
来源: http://www.bubuko.com/infodetail-3385318.html