最简单的 Forms 登录 (适合初学者和快速原型)

这个方案不使用 ASP.NET Identity,而是直接使用 ASP.NET 内置的 Forms Authentication 功能,它更轻量,但功能较少(如没有内置的用户管理、角色管理等)。

asp.net网页登录代码下载
(图片来源网络,侵删)

核心思路

  1. 创建一个登录页面 (Login.aspx),包含用户名和密码输入框。
  2. 在登录按钮的点击事件中,验证用户名和密码是否正确(通常是从数据库或配置中读取)。
  3. 如果验证成功,调用 FormsAuthentication.RedirectFromLoginPage 方法创建身份验证票据,并重定向到用户最初想访问的页面或首页。
  4. 在需要保护的页面上,通过 web.config 文件配置 <authentication><authorization> 节点来限制访问。

代码示例

创建项目 使用 Visual Studio 创建一个 "ASP.NET Web 应用程序",选择 "Web Forms" 模板。

配置 web.configweb.config 中添加以下配置:

<configuration>
  <system.web>
    <!-- 启用 Forms 身份验证 -->
    <authentication mode="Forms">
      <forms loginUrl="~/Login.aspx" timeout="30" />
    </authentication>
    <!-- 授权规则:拒绝所有匿名用户访问 -->
    <authorization>
      <deny users="?" />
    </authorization>
    ... 其他配置 ...
  </system.web>
</configuration>

创建登录页面 Login.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="SimpleLogin.Login" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">登录</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <h3>用户登录</h3>
            <asp:Label ID="lblMessage" runat="server" ForeColor="Red"></asp:Label>
            <br />
            <asp:Label runat="server" Text="用户名:"></asp:Label>
            <asp:TextBox ID="txtUsername" runat="server"></asp:TextBox>
            <br />
            <asp:Label runat="server" Text="密码:"></asp:Label>
            <asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox>
            <br />
            <asp:Button ID="btnLogin" runat="server" Text="登录" OnClick="btnLogin_Click" />
        </div>
    </form>
</body>
</html>

编写登录逻辑 Login.aspx.cs

asp.net网页登录代码下载
(图片来源网络,侵删)
using System;
using System.Web.Security; // 引入命名空间
namespace SimpleLogin
{
    public partial class Login : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void btnLogin_Click(object sender, EventArgs e)
        {
            string username = txtUsername.Text.Trim();
            string password = txtPassword.Text.Trim();
            // 1. 验证用户名和密码 (这里使用硬编码,实际项目中应查询数据库)
            // 注意:永远不要在代码中明文存储密码!这里仅为演示。
            if (username == "admin" && password == "password123")
            {
                // 2. 验证成功,创建身份验证票据并重定向
                // 第二个参数 true 表示创建持久性 Cookie (下次访问仍保持登录状态)
                FormsAuthentication.RedirectFromLoginPage(username, false);
            }
            else
            {
                // 3. 验证失败,显示错误信息
                lblMessage.Text = "用户名或密码错误!";
            }
        }
    }
}

访问受保护的页面 创建一个 Default.aspx 页面,由于 web.config 中配置了 <deny users="?" />,任何未登录的用户尝试访问 Default.aspx 都会被自动重定向到 Login.aspx,登录成功后,会自动跳回 Default.aspx


使用 ASP.NET Identity (强烈推荐)

这是目前 ASP.NET 中最现代、最强大、最灵活的会员系统方案,它基于 Entity Framework,支持用户、角色、OAuth 外部登录、密码哈希、双因素认证等高级功能。

核心思路

  1. 通过 NuGet 包管理器安装 Microsoft.AspNet.Identity.EntityFramework 等相关包。
  2. 创建 ApplicationDbContext 类,继承自 IdentityDbContext,用于与数据库交互。
  3. 创建 ApplicationUser 类,继承自 IdentityUser,可以添加自定义的用户属性(如电话号码、生日等)。
  4. 创建 AccountController,处理注册、登录、登出等所有与账户相关的操作。
  5. Startup.cs (或 App_Start/IdentityConfig.cs) 中配置 Identity 服务。
  6. 使用 ASP.NET MVC 或 Razor Pages 的内置帮助方法(如 @Html.ActionLink("Log off", "LogOff", "Account"))来生成登录/注册链接和表单。

代码示例 (ASP.NET MVC)

创建项目 使用 Visual Studio 创建一个 "ASP.NET Web 应用程序",选择 MVC 模板。勾选 "个人用户账户" 选项,Visual Studio 会自动为你生成所有必要的代码和配置!

生成的核心文件结构 项目创建后,你会看到以下关键文件:

asp.net网页登录代码下载
(图片来源网络,侵删)
  • Models/IdentityModels.cs: 包含 ApplicationUserApplicationDbContext
  • Controllers/AccountController.cs: 包含注册、登录、登出、忘记密码等所有 Action。
  • Views/Account/: 包含所有账户相关的视图页面,如 Login.cshtml, Register.cshtml
  • App_Start/IdentityConfig.cs: 包含 ApplicationUserManagerApplicationSignInManager 的配置。
  • Startup.cs: 包含 Identity 服务的注册和配置。

如何使用(无需编写代码)

  • 运行项目:直接按 F5 运行项目,会自动跳转到登录页面。
  • 注册新用户:点击“注册”链接,填写信息即可创建一个新用户,用户信息会被自动保存到 SQL Server LocalDB 中。
  • 登录:使用刚注册的用户名和密码登录。

如何获取代码 由于这个功能是内置的,你不需要“下载”额外的代码,最好的学习方式就是自己创建一个 MVC 项目,然后仔细研究它自动生成的代码,这是学习 ASP.NET Identity 最直接、最有效的方法。

如果你想在现有项目中手动添加 Identity,可以参考官方文档: https://docs.microsoft.com/zh-cn/aspnet/core/security/authentication/identity


ASP.NET Core 中的登录实现 (现代、跨平台)

如果你使用的是最新的 .NET 技术,那么应该使用 ASP.NET Core 的 Identity 系统,它与 ASP.NET Identity 3.x/4.x 非常相似,但与 ASP.NET Core 的依赖注入 (DI) 和中间件系统结合得更紧密。

核心思路

与 ASP.NET Identity 类似,但配置和使用方式略有不同:

  1. 创建一个 ASP.NET Core Web 应用程序 (MVC 或 Razor Pages),选择 "Web 应用程序" 模板并勾选" Individual User Accounts"
  2. 同样,所有代码会自动生成。
  3. 配置主要在 Startup.csConfigureServicesConfigure 方法中完成。
  4. 登录/登出的 API 和视图都包含在生成的 AccountControllerAreas/Identity/Pages/Account 文件夹中。

代码示例 (ASP.NET Core MVC)

创建项目 使用 Visual Studio 或 dotnet new 命令创建一个 ASP.NET Core MVC 项目,并选择“启用 HTTPS”和“个人用户账户”。

生成的核心文件

  • Models/ApplicationDbContext.cs: 数据库上下文。
  • Models/IdentityUser.cs (以及 ApplicationUser.cs 如果自定义了): 用户模型。
  • Controllers/AccountController.cs: 账户控制器。
  • Areas/Identity/: 包含所有 Identity 相关的页面。
  • Startup.cs: 服务和中间件配置。

如何使用 与 ASP.NET Identity 完全一样,运行项目即可体验完整的注册和登录功能。


总结与建议

特性 方案一 (Forms Auth) 方案二 (ASP.NET Identity) 方案三 (ASP.NET Core Identity)
技术栈 ASP.NET Web Forms ASP.NET MVC / Web Forms ASP.NET Core MVC / Razor Pages
推荐度 ⭐⭐ (仅用于非常简单的场景或旧项目维护) ⭐⭐⭐⭐⭐ (经典 .NET 项目的首选) ⭐⭐⭐⭐⭐ (新项目的绝对首选)
优点 简单、轻量、配置少 功能强大、灵活、社区支持好、安全、易于扩展 现代化、跨平台、性能更好、与 .NET Core 生态无缝集成
缺点 功能有限、已过时、扩展性差 配置稍复杂、依赖 EF 相对较新,但文档和社区非常完善
适合场景 学习原理、维护旧系统、内部工具 基于 .NET Framework 的新项目 基于 .NET 5/6/7/8 的新项目

最终建议:

  • 如果你是初学者,想了解登录的基本原理,可以从方案一开始,理解 FormsAuthentication 的工作方式。
  • 如果你要开发一个新的、基于 .NET Framework 的项目,请毫不犹豫地选择方案二 (ASP.NET Identity),直接创建 MVC 项目并勾选 "个人用户账户" 是最快的入门方式。
  • 如果你要开发一个新的、基于 .NET Core / .NET 5+ 的项目,请使用方案三 (ASP.NET Core Identity),这是未来的方向,性能和功能都更优。

对于绝大多数新项目,直接使用 Visual Studio 模板生成的代码是最好的“下载”方式,因为它包含了经过深思熟虑的最佳实践和完整的功能集。