如何创建与指定教程同版且带用户身份验证的ASP.NET Core MVC应用?
解决MvcMovie集成身份验证的迁移混乱与链接失效问题
我之前踩过一模一样的坑,给你整理了一套亲测有效的分步方案,完美解决初始选身份验证导致的迁移混乱,同时确保MvcMovie的功能正常运行:
1. 先搭建基础MvcMovie项目(无身份验证)
先严格按照教程步骤创建不带身份验证的MvcMovie项目,先把电影列表、详情、增删改查这些基础功能跑通,确保所有MvcMovie相关链接都能正常访问。这一步是为了避免身份验证框架一开始就干扰项目的基础结构。
2. 手动集成身份验证框架
等基础项目稳定后,再手动添加身份验证组件,步骤如下:
- 安装依赖包:在终端或包管理器控制台执行:
Install-Package Microsoft.AspNetCore.Identity.EntityFrameworkCore Install-Package Microsoft.AspNetCore.Identity.UI - 修改DbContext:让你的
MvcMovieContext继承自IdentityDbContext<IdentityUser>(替换原来的DbContext),示例代码:public class MvcMovieContext : IdentityDbContext<IdentityUser> { public MvcMovieContext(DbContextOptions<MvcMovieContext> options) : base(options) { } public DbSet<Movie> Movie { get; set; } } - 配置服务与中间件:
- 在Program.cs(或Startup.cs)的服务配置中添加:
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<MvcMovieContext>(); - 确保中间件顺序正确:
app.UseAuthentication()必须放在app.UseAuthorization()之前,且在app.UseRouting()之后;最后添加app.MapRazorPages()(Identity依赖Razor Pages)。
- 在Program.cs(或Startup.cs)的服务配置中添加:
- 生成身份验证页面:在终端执行:
这会自动生成登录、注册等核心身份验证页面。dotnet aspnet-codegenerator identity -dc MvcMovieContext --files "Account.Register;Account.Login;Account.Logout"
3. 彻底解决数据库迁移混乱
这一步是关键,避免初始身份验证导致的迁移冲突:
- 清理旧迁移:删除项目中所有已有的迁移文件(通常在
Migrations文件夹下),同时删除本地测试数据库。 - 创建全新迁移:在包管理器控制台执行:
这个迁移会同时包含MvcMovie的电影表和身份验证的用户、角色等表结构。Add-Migration InitialCreateWithIdentity - 应用迁移到数据库:执行:
这样就能得到一个干净的、同时包含两种业务数据的数据库。Update-Database
4. 修复MvcMovie链接无响应问题
如果做完上述步骤后电影链接仍无法访问,检查以下几点:
- 路由配置:确保默认控制器路由
app.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}")已正确配置,且放在app.MapRazorPages()之前。 - Tag Helper使用:视图中的链接要使用ASP.NET Core的Tag Helper,比如
<a asp-controller="Movies" asp-action="Index">电影列表</a>,避免硬编码URL。 - 缓存问题:清除浏览器缓存或使用无痕模式测试,避免旧缓存导致的链接失效。
额外建议
- 测试时先注册一个用户并登录,验证身份验证流程和MvcMovie功能是否能协同工作。
- 如果仍有迁移问题,可以尝试使用
Update-Database -Migration 0回滚所有迁移,再重新执行新的迁移命令。
内容的提问来源于stack exchange,提问作者MRP
相关产品推荐
相关产品推荐

