在 ASP.NET MVC 5 中,你创建新项目时会看到两个非常相似的模板:
- Empty(空)
- Internet Application(Internet 应用程序)
- Intranet Application(Intranet 应用程序)
下面详细解释 Internet Application(Internet 应用程序) 到底是什么,它帮你自动生成了哪些东西,非常适合快速搭建一个面向互联网用户的网站(比如商城、博客、论坛等)。
一、选择 “Internet Application” 后,VS 自动帮你生成什么?
| 功能模块 | 具体生成内容 | 说明 |
|---|---|---|
| 身份认证系统 | ASP.NET Identity 2.x(基于 Entity Framework) | 支持用户名+密码、第三方登录(Google、微信等可扩展) |
| 注册页面 | AccountController + Register.cshtml | 用户自己注册 |
| 登录/注销 | Login.cshtml、Logout 动作 | 完整流程 |
| 密码找回 | ForgotPassword.cshtml → ForgotPasswordConfirmation → ResetPassword | 发邮件重置密码(需配置 SMTP) |
| 邮箱确认 | ConfirmEmail 流程 | 注册后必须点邮件激活 |
| 两步验证(2FA) | 已集成框架,可一键开启 | 安全加分 |
| 社交登录(OAuth) | 已集成 Microsoft、Facebook、Google、Twitter 登录(只需填 AppId/Secret) | 开箱即用 |
| 用户角色管理 | RoleManager(默认有但没创建角色,可手动加) | 后续可快速加 Admin 角色 |
| 防伪令牌 | @Html.AntiForgeryToken() 已全部加上 | 防止 CSRF |
| 布局页 | _Layout.cshtml + Bootstrap 3(已美化) | 直接好看 |
| 404 与错误页 | Views/Shared/Error.cshtml、_ViewStart.cshtml | 友好提示 |
| 数据库 | LocalDB + 自动迁移(Migrations 已开启) | 第一次运行自动建表 |
总结一句话:
选了 Internet Application = 你立刻拥有一个完整的、带用户注册登录、邮箱验证、密码找回、社交登录的现代化网站骨架,省了至少 2~3 天的搭建时间。
二、生成的账号相关控制器和视图(重点)
Controllers/
└─ AccountController.cs ← 注册、登录、外部登录、密码管理全在这
└─ ManageController.cs ← 修改密码、两步验证、个人资料
Views/
├─ Account/
│ ├─ Login.cshtml
│ ├─ Register.cshtml
│ ├─ ForgotPassword.cshtml
│ ├─ ResetPassword.cshtml
│ └─ ExternalLogin... 等
├─ Manage/
│ ├─ Index.cshtml
│ ├─ ChangePassword.cshtml
│ └─ ...
└─ Shared/
├─ _LoginPartial.cshtml ← 右上角“您好,张三 [注销]”或“注册 登录”
└─ _Layout.cshtml
三、第一次运行会自动创建的数据库表(LocalDB)
dbo.AspNetUsers ← 用户主表(包含 EmailConfirmed、PhoneNumber 等)
dbo.AspNetRoles ← 角色表
dbo.AspNetUserRoles ← 用户-角色关联
dbo.AspNetUserClaims
dbo.AspNetUserLogins ← 第三方登录(如 Google 账号绑定)
四、如何快速开始使用(3 分钟上手)
- 新建项目 → ASP.NET Web 应用程序 → 选 MVC
身份验证 → 选择 Individual User Accounts(个人用户账户)
(这就是 Internet Application) - F5 运行
→ 右上角点【注册】→ 填邮箱密码 → 注册成功
(注意:默认邮箱确认是开启的,但没配置 SMTP,所以会提示“电子邮件已发送”,其实没发) - 临时关闭邮箱确认(开发时方便)
打开App_Start/IdentityConfig.cs中的EmailService类,先改成下面这样跳过真实发邮件:
public Task SendAsync(IdentityMessage message)
{
// 开发时直接在控制台打印,不发真实邮件
System.Diagnostics.Debug.WriteLine($"【邮件】To: {message.Destination} Subject: {message.Subject} Body: {message.Body}");
return Task.FromResult(0);
}
再在 AccountController.Register 动作里把这段注释掉:
// await UserManager.SendEmailAsync(user.Id, "确认您的帐户", "请通过单击 <a href=\"" + callbackUrl + "\">此处的链接</a> 确认你的帐户");
await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
五、常见需求快速实现方式(基于 Internet 模板)
| 需求 | 实现方式 |
|---|---|
| 新增管理员角色 | Startup.cs 或 Global.asax → 创建 “Admin” 角色,把用户加入 |
| 只有管理员能访问后台 | 在 AdminController 上加 [Authorize(Roles = "Admin")] |
| 记住登录状态 30 天 | 登录时 await SignInManager.SignInAsync(user, isPersistent: true, ...) |
| 强制 HTTPS | 加 [RequireHttps] 特性 |
| 微信/QQ 登录 | 自己再加 OAuth 中间件(模板已留好扩展位置) |
六、模板对比总结
| 模板 | 适合场景 | 有无登录注册 |
|---|---|---|
| Empty | 完全从零开始,自己掌控一切 | 无 |
| Internet Application | 面向互联网用户(商城、博客、社区) | 有(完整) |
| Intranet Application | 企业内部系统(Windows 域认证) | 有(但用公司账号登录) |
结论:
如果你要做一个面向公众开放、需要用户自己注册登录的网站,直接选 Internet Application(个人用户账户),是最高效的选择!
需要我打包发你一个:
- Internet 模板 + Bootstrap 5 升级版 + 中文提示 + 管理员初始化代码 + 后台管理系统骨架
直接拉下来就能跑,随时说一声即可!