Asp.net core mvc 如何在asp.net core 2.2中使用MVC而不是razor页面

Asp.net core mvc 如何在asp.net core 2.2中使用MVC而不是razor页面,asp.net-core-mvc,asp.net-core-identity,asp.net-core-2.2,Asp.net Core Mvc,Asp.net Core Identity,Asp.net Core 2.2,由于asp.net core 2.1,MVC不支持作为带有标识的默认模型。我想在asp.net core 2.2中使用MVC运行Identity 长话短说。这是一个带有本地数据库的asp.net 4.6.2站点,我希望升级到asp.net core 2.2。我认为这将是一件简单的事情。我错了。那么我做了什么: 创建了具有本地标识的新ASP.net core 2.0项目 首先使用Scaffold DbContext使用数据库构建ef上下文 修正了EF在启动时正确加载的问题 从scaffold Db

由于asp.net core 2.1,MVC不支持作为带有标识的默认模型。我想在asp.net core 2.2中使用MVC运行Identity

长话短说。这是一个带有本地数据库的asp.net 4.6.2站点,我希望升级到asp.net core 2.2。我认为这将是一件简单的事情。我错了。那么我做了什么:

  • 创建了具有本地标识的新ASP.net core 2.0项目
  • 首先使用Scaffold DbContext使用数据库构建ef上下文
  • 修正了EF在启动时正确加载的问题
  • 从scaffold Dbcontext生成的scaffold中删除了aspnetusers、aspnetuserroles、aspnetuserlogin、aspnetroles模型
  • 已将ApplicationDbContext更新为从IdentityDbContext继承。ApplicationUser从IdentityUser继承
  • 在我假装已经应用了迁移之后,我在aspnetusers中手动添加了以下列
  • 6.1并发放大器

    6.2规范化用户名称

    6.3电子邮件

    6.4更改名称锁外端?锁边

    系统已建立,但我仍然无法使用帐户控制器。我已经按照步骤进行了 无济于事。我所做的似乎是,即使在我构建了身份之后,我也无法让它读取mvc控制器

    我认为asp.net core 2.X Identity中的Identity实现的区别在于早期的实现要么太高,要么太窄

    包括我创业的一部分

           services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });
    
            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(
                    Configuration.GetConnectionString("DefaultConnection")));
            services.AddIdentity<ApplicationUser, IdentityRole>()
                // services.AddDefaultIdentity<IdentityUser>()
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders();
    
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
                .AddRazorPagesOptions(options =>
                {
                    options.AllowAreas = true;
                    //options.Conventions.AuthorizeAreaFolder("Identity", "/Account/Manage");
                    //options.Conventions.AuthorizeAreaPage("Identity", "/Account/Logout");
                });
    
            services.ConfigureApplicationCookie(options =>
            {
                options.LoginPath = $"/Account/Login";
                options.LogoutPath = $"/Account/Logout";
                options.AccessDeniedPath = $"/Account/AccessDenied";
            });
    
            // using Microsoft.AspNetCore.Identity.UI.Services;
            services.AddSingleton<IEmailSender, EmailSender>();
        }
    
    services.Configure(选项=>
    {
    //此lambda确定给定请求是否需要非必要cookie的用户同意。
    options.checkApprovered=context=>true;
    options.MinimumSameSitePolicy=SameSiteMode.None;
    });
    services.AddDbContext(选项=>
    options.UseSqlServer(
    GetConnectionString(“DefaultConnection”);
    服务.额外性()
    //services.AddDefaultIdentity()
    .AddEntityFrameworkStores()
    .AddDefaultTokenProviders();
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
    .AddRazorPagesOptions(选项=>
    {
    options.AllowAreas=true;
    //options.Conventions.AuthorizeAreaFolder(“Identity”,“Account/Manage”);
    //选项.约定.授权区域页面(“标识”,“/Account/Logout”);
    });
    services.configureApplicationOK(选项=>
    {
    options.LoginPath=$“/Account/Login”;
    options.LogoutPath=$“/Account/Logout”;
    options.AccessDeniedPath=$“/Account/AccessDenied”;
    });
    //使用Microsoft.AspNetCore.Identity.UI.Services;
    services.AddSingleton();
    }
    
    我想将带有Identity Core 2.2的MVC与Identity.Net中的旧数据库一起使用


    有什么建议吗?

    现在还不清楚你到底在做什么,但听起来好像你已经把身份剃须刀页面编入了你的项目中。如果是这样的话,这些将取代你的控制器,因为这是一个更实际的路线


    所有其他代码看起来都不错。您使用的是
    AddIdentity
    而不是
    AddDefaultIdentity
    (因此不包括默认UI)。假设您实际创建了一个
    AccountController
    ,并且您的路由设置正确,那么它应该可以工作,只要您的项目中没有实际构建的默认UI。

    最近我也做了同样的事情。以下内容可能会对您有所帮助。首先为所有AspNet表创建等效的应用程序表。下面的MS SQL Server脚本将创建:

    dbo.ApplicationRole
    dbo.ApplicationRoleClaim
    dbo.ApplicationUser
    dbo.ApplicationUserClaim
    dbo.ApplicationUserLogin
    dbo.ApplicationUserRole
    dbo.ApplicationUserToken
    
  • 打开MS SQL Server管理工作室
  • 选择您的数据库
  • 启动新查询
  • 运行下面的脚本并用数据库名称替换您的_数据库
  • 接下来,您应该将即将过时的AspNet表的内容复制到新的应用程序表中。在此过程中,您还应该处理从nvarcharintUserIdRoleId数据类型的更改


  • 好啊这是可行的,我将把它作为答案。但是Accountcontroller需要在名为Identity的区域中工作。。为什么我不知道,但它似乎是硬编码在最新的身份核心
    USE [YOUR_DATABASE]
    GO
    /****** Object:  Table [dbo].[ApplicationRole]    Script Date: 24-May-21 9:44:46 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[ApplicationRole](
        [Id] [int] NOT NULL,
        [Name] [nvarchar](256) NULL,
        [NormalizedName] [nvarchar](256) NULL,
        [ConcurrencyStamp] [nvarchar](max) NULL,
     CONSTRAINT [PK_ApplicationRoles] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
    /****** Object:  Table [dbo].[ApplicationRoleClaim]    Script Date: 24-May-21 9:44:46 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[ApplicationRoleClaim](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [RoleId] [int] NOT NULL,
        [ClaimType] [nvarchar](max) NULL,
        [ClaimValue] [nvarchar](max) NULL,
     CONSTRAINT [PK_ApplicationRoleClaims] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
    /****** Object:  Table [dbo].[ApplicationUser]    Script Date: 24-May-21 9:44:46 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[ApplicationUser](
        [Id] [int] NOT NULL,
        [UserName] [nvarchar](256) NULL,
        [NormalizedUserName] [nvarchar](256) NULL,
        [Email] [nvarchar](256) NULL,
        [NormalizedEmail] [nvarchar](256) NULL,
        [EmailConfirmed] [bit] NOT NULL,
        [PasswordHash] [nvarchar](max) NULL,
        [SecurityStamp] [nvarchar](max) NULL,
        [ConcurrencyStamp] [nvarchar](max) NULL,
        [PhoneNumber] [nvarchar](max) NULL,
        [PhoneNumberConfirmed] [bit] NOT NULL,
        [TwoFactorEnabled] [bit] NOT NULL,
        [LockoutEnd] [datetimeoffset](7) NULL,
        [LockoutEnabled] [bit] NOT NULL,
        [AccessFailedCount] [int] NOT NULL,
     CONSTRAINT [PK_ApplicationUsers] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
    /****** Object:  Table [dbo].[ApplicationUserClaim]    Script Date: 24-May-21 9:44:46 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[ApplicationUserClaim](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [UserId] [int] NOT NULL,
        [ClaimType] [nvarchar](max) NULL,
        [ClaimValue] [nvarchar](max) NULL,
     CONSTRAINT [PK_ApplicationUserClaims] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
    /****** Object:  Table [dbo].[ApplicationUserLogin]    Script Date: 24-May-21 9:44:46 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[ApplicationUserLogin](
        [LoginProvider] [nvarchar](128) NOT NULL,
        [ProviderKey] [nvarchar](128) NOT NULL,
        [ProviderDisplayName] [nvarchar](max) NULL,
        [UserId] [int] NOT NULL,
     CONSTRAINT [PK_ApplicationUserLogins] PRIMARY KEY CLUSTERED 
    (
        [LoginProvider] ASC,
        [ProviderKey] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
    /****** Object:  Table [dbo].[ApplicationUserRole]    Script Date: 24-May-21 9:44:46 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[ApplicationUserRole](
        [UserId] [int] NOT NULL,
        [RoleId] [int] NOT NULL,
     CONSTRAINT [PK_ApplicationUserRole] PRIMARY KEY CLUSTERED 
    (
        [UserId] ASC,
        [RoleId] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    /****** Object:  Table [dbo].[ApplicationUserToken]    Script Date: 24-May-21 9:44:46 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[ApplicationUserToken](
        [UserId] [int] NOT NULL,
        [LoginProvider] [nvarchar](128) NOT NULL,
        [Name] [nvarchar](128) NOT NULL,
        [Value] [nvarchar](max) NULL,
     CONSTRAINT [PK_ApplicationUserTokens] PRIMARY KEY CLUSTERED 
    (
        [UserId] ASC,
        [LoginProvider] ASC,
        [Name] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
    ALTER TABLE [dbo].[ApplicationRoleClaim]  WITH CHECK ADD  CONSTRAINT [FK_ApplicationRoleClaims_ApplicationRoles_RoleId] FOREIGN KEY([RoleId])
    REFERENCES [dbo].[ApplicationRole] ([Id])
    ON DELETE CASCADE
    GO
    ALTER TABLE [dbo].[ApplicationRoleClaim] CHECK CONSTRAINT [FK_ApplicationRoleClaims_ApplicationRoles_RoleId]
    GO
    ALTER TABLE [dbo].[ApplicationUser]  WITH CHECK ADD  CONSTRAINT [FK_ApplicationUsers_Club] FOREIGN KEY([ClubId])
    REFERENCES [dbo].[Club] ([Id])
    GO
    ALTER TABLE [dbo].[ApplicationUser] CHECK CONSTRAINT [FK_ApplicationUsers_Club]
    GO
    ALTER TABLE [dbo].[ApplicationUserClaim]  WITH CHECK ADD  CONSTRAINT [FK_ApplicationUserClaims_ApplicationUsers_UserId] FOREIGN KEY([UserId])
    REFERENCES [dbo].[ApplicationUser] ([Id])
    ON DELETE CASCADE
    GO
    ALTER TABLE [dbo].[ApplicationUserClaim] CHECK CONSTRAINT [FK_ApplicationUserClaims_ApplicationUsers_UserId]
    GO
    ALTER TABLE [dbo].[ApplicationUserLogin]  WITH CHECK ADD  CONSTRAINT [FK_ApplicationUserLogins_ApplicationUsers_UserId] FOREIGN KEY([UserId])
    REFERENCES [dbo].[ApplicationUser] ([Id])
    ON DELETE CASCADE
    GO
    ALTER TABLE [dbo].[ApplicationUserLogin] CHECK CONSTRAINT [FK_ApplicationUserLogins_ApplicationUsers_UserId]
    GO
    ALTER TABLE [dbo].[ApplicationUserRole]  WITH CHECK ADD  CONSTRAINT [FK_ApplicationUserRole_ApplicationRole] FOREIGN KEY([RoleId])
    REFERENCES [dbo].[ApplicationRole] ([Id])
    ON DELETE CASCADE
    GO
    ALTER TABLE [dbo].[ApplicationUserRole] CHECK CONSTRAINT [FK_ApplicationUserRole_ApplicationRole]
    GO
    ALTER TABLE [dbo].[ApplicationUserRole]  WITH CHECK ADD  CONSTRAINT [FK_ApplicationUserRole_ApplicationUser] FOREIGN KEY([UserId])
    REFERENCES [dbo].[ApplicationUser] ([Id])
    ON DELETE CASCADE
    GO
    ALTER TABLE [dbo].[ApplicationUserRole] CHECK CONSTRAINT [FK_ApplicationUserRole_ApplicationUser]
    GO
    ALTER TABLE [dbo].[ApplicationUserToken]  WITH CHECK ADD  CONSTRAINT [FK_ApplicationUserTokens_ApplicationUsers_UserId] FOREIGN KEY([UserId])
    REFERENCES [dbo].[ApplicationUser] ([Id])
    ON DELETE CASCADE
    GO
    ALTER TABLE [dbo].[ApplicationUserToken] CHECK CONSTRAINT [FK_ApplicationUserTokens_ApplicationUsers_UserId]
    GO