如何在ASP.NET MVC中实现无需注册的独立账户
如何创建不含用户注册模块的ASP.NET MVC独立账户项目
嘿,这个问题我刚好处理过好几次,其实不用太复杂,完全可以实现不含注册功能的独立账户项目,甚至不需要深度自定义类,下面分两种最实用的方案给你说明:
方案一:创建默认独立账户项目后快速移除注册功能
这是最直接的方式,因为默认的独立账户模板已经包含了完整的登录、密码重置等功能,我们只需要删掉注册相关的部分即可:
- 删除注册视图:找到项目里的
Views/Account文件夹,直接删除Register.cshtml和RegisterConfirmation.cshtml两个视图文件。 - 移除控制器中的注册动作:打开
Controllers/AccountController.cs,删除所有和注册相关的方法(包括Register的GET和POST版本,以及对应的[AllowAnonymous]特性)。 - 移除导航栏的注册链接:在
Views/Shared/_Layout.cshtml里找到带有@Html.ActionLink("Register", "Register", "Account")的代码行,直接删除或者注释掉。 - (可选)屏蔽注册路由访问:如果担心有人手动输入
/Account/Register路径,可以在RouteConfig.cs里添加路由约束,或者在AccountController里添加一个空的Register方法并返回404/重定向到登录页,不过其实删掉控制器动作后,访问该路径会直接返回404,大部分场景下足够用了。
方案二:手动搭建仅含登录功能的独立账户项目
如果你不想一开始就有注册模块的代码,可以从空MVC项目开始手动搭建,这时候只需要少量的标准继承类,不算复杂自定义:
- 添加ASP.NET Identity NuGet包:在NuGet包管理器中安装
Microsoft.AspNet.Identity.Core、Microsoft.AspNet.Identity.EntityFramework和Microsoft.AspNet.Identity.Mvc。 - 定义基础Identity类:创建
Models/IdentityModels.cs,里面只需要两个标准继承类(和默认模板里的类似,但我们不需要扩展注册相关的逻辑):using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using System.Data.Entity; public class ApplicationUser : IdentityUser { // 这里可以添加你需要的用户属性,不需要注册相关的额外字段 } public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false) { } public static ApplicationDbContext Create() { return new ApplicationDbContext(); } } - 创建仅含登录相关动作的AccountController:只实现
Login(GET和POST)、Logout、ForgotPassword等必要的登录相关方法,完全不需要写注册逻辑。 - 添加登录视图:创建
Views/Account/Login.cshtml等必要视图,不用创建注册相关的视图。
关于自定义类的疑问
其实两种方案都不需要深度自定义复杂的类:
- 方案一几乎不需要修改任何类,只是删除默认生成的代码。
- 方案二需要定义的
ApplicationUser和ApplicationDbContext都是直接继承ASP.NET Identity的基础类,属于标准用法,不算自定义复杂逻辑,你甚至可以直接用默认的Identity类而不做任何扩展。
总结下来,完全可以创建不含注册模块的独立账户项目,操作起来很简单,不需要深入自定义一堆类~
内容的提问来源于stack exchange,提问作者user3813075
相关产品推荐
相关产品推荐

