为什么选择 ASP.NET?
在开始之前,了解它的优势很重要:

- 高性能:ASP.NET Core 经过重新设计,性能极高,尤其在处理高并发请求方面表现出色。
- 跨平台:它可以在 Windows、Linux 和 macOS 上运行,部署选择非常灵活。
- 开源:由微软和全球社区共同维护,完全开源,拥有丰富的生态系统。
- 安全性:内置了多种安全功能,如身份验证、授权、数据保护等,可以有效防范常见的网络攻击。
- 语言支持:主要使用 C#,一种现代、类型安全、功能强大的编程语言,开发体验优秀。
- 丰富的工具链:拥有 Visual Studio (Windows) 和 Visual Studio Code (跨平台) 这两款顶级的集成开发环境,提供强大的调试、智能提示和项目管理功能。
- 可扩展性:从单页应用到大型分布式微服务架构,ASP.NET 都能很好地支持。
核心技术栈:ASP.NET Core MVC / Razor Pages
当你用 ASP.NET 做网站时,通常会用到以下几个核心技术:
-
ASP.NET Core:这是整个框架的基础,它负责处理 HTTP 请求、依赖注入、配置管理等底层工作。
-
MVC (Model-View-Controller) 架构模式:这是一种非常经典的设计模式,将网站代码清晰地分为三部分:
- Model (模型):负责数据和业务逻辑,它定义了你的数据结构(如
User、Product类),并处理数据的增删改查等操作。 - View (视图):负责展示数据,它通常是 HTML 页面,其中嵌入了 Razor 语法来显示从 Model 传来的数据。
- Controller (控制器):负责接收用户请求,调用 Model 处理数据,然后选择一个 View 返回给用户,它是 Model 和 View 之间的“协调者”。
- Model (模型):负责数据和业务逻辑,它定义了你的数据结构(如
-
Razor 语法:这是 ASP.NET Core 中用于在 HTML 中嵌入 C# 代码的标记语法,它简洁、高效,是生成动态内容的核心。
(图片来源网络,侵删)- 示例:
<h1>@Model.UserName</h1>(在 HTML 中显示 C# 变量) - 示例:
@if (IsLoggedIn) { <a href="/logout">退出</a> }(条件渲染)
- 示例:
-
Entity Framework Core (EF Core):这是微软官方的对象关系映射器,它让你可以用 C# 对象(Model)来操作数据库,而无需编写复杂的 SQL 语句,这极大地提高了开发效率。
如何开始:一个简单的“Hello World”网站
这里我们使用 Visual Studio 2025 和 Razor Pages(比 MVC 更简单,适合新手)来创建项目。
步骤 1:安装环境
- 安装 .NET 6 SDK (或更高版本):下载地址
- 安装 Visual Studio 2025 Community (免费版):下载地址
- 安装时,务必勾选 “.NET 桌面开发” 或 “ASP.NET 和 Web 开发” 工作负载。
步骤 2:创建项目
- 打开 Visual Studio 2025。
- 点击 “创建新项目” (Create a new project)。
- 在模板搜索框中输入
Razor Pages,选择 “ASP.NET Core Web App” 模板,然后点击 “下一步”。 - 填写项目名称(如
MyFirstWebApp),选择一个位置,点击 “下一步”。 - 在 “其他信息” 页面:
- 框架:选择
.NET 6.0或更高版本。 - 认证类型:选择 “无” (No Authentication),因为我们现在只需要一个简单的页面。
- 勾选 “为 HTTPS 配置” (Configure for HTTPS)。
- 框架:选择
- 点击 “创建”,Visual Studio 会为你生成一个完整的项目结构。
步骤 3:理解项目结构
打开项目后,你会看到几个重要的文件夹:
- Pages:存放所有的 Razor 页面文件,每个
.cshtml文件代表一个页面。Index.cshtml:网站的首页。Privacy.cshtml:隐私页。_ViewStart.cshtml:定义所有页面默认使用的布局文件。Error.cshtml:错误页。
- wwwroot:存放静态资源,如 CSS、JavaScript 文件、图片等。
- appsettings.json:应用程序的配置文件(如数据库连接字符串)。
- Program.cs:应用程序的入口点,在这里配置服务(如 MVC)和请求管道。
- Startup.cs:在较新版本的 .NET 中,配置逻辑已移至
Program.cs。
步骤 4:修改首页并运行
-
打开
Pages/Index.cshtml文件,你会看到默认的 HTML 内容。 -
修改
<h1>标签的内容,@page @model IndexModel @{ ViewData["Title"] = "Home page"; } <div class="text-center"> <h1 class="display-4">欢迎使用我的第一个 ASP.NET 网站!</h1> <p>欢迎来到 C# 和 ASP.NET Core 的世界。</p> </div> -
按下
F5或点击工具栏上的 “播放” 按钮来运行项目。 -
浏览器会自动打开,显示你修改后的页面,恭喜,你已经成功创建并运行了你的第一个 ASP.NET 网站!
实战:构建一个简单的“待办事项”列表
让我们来做一个更有趣的功能:一个可以添加和显示待办事项的列表。
步骤 1:创建数据模型
在 Models 文件夹(如果没有就创建一个)中,创建一个 TodoItem.cs 文件:
// Models/TodoItem.cs
namespace MyFirstWebApp.Models
{
public class TodoItem
{
public int Id { get; set; }
public string? Task { get; set; }
public bool IsDone { get; set; }
}
}
步骤 2:创建数据库上下文
这个类是 EF Core 的核心,负责与数据库交互。
-
在
Models文件夹中创建TodoDbContext.cs文件:// Models/TodoDbContext.cs using Microsoft.EntityFrameworkCore; namespace MyFirstWebApp.Models { public class TodoDbContext : DbContext { public TodoDbContext(DbContextOptions<TodoDbContext> options) : base(options) { } public DbSet<TodoItem> TodoItems { get; set; } } }
步骤 3:注册数据库服务
打开 Program.cs,添加以下代码来注册 EF Core 服务和数据库上下文:
// Program.cs
// ... 现有的 using 语句 ...
using Microsoft.EntityFrameworkCore;
using MyFirstWebApp.Models; // 添加这一行
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
// 添加以下代码
builder.Services.AddDbContext<TodoDbContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("DefaultConnection")));
var app = builder.Build();
// ... 其余代码 ...
在 appsettings.json 中添加数据库连接字符串:
{
"ConnectionStrings": {
"DefaultConnection": "Data Source=todo.db"
},
// ... 其他配置 ...
}
步骤 4:应用数据库迁移
EF Core 可以根据你的模型自动创建数据库。
- 在 Visual Studio 的 “程序包管理器控制台” (Package Manager Console) 中 (工具 -> NuGet 包管理器 -> 程序包管理器控制台)。
- 依次执行以下命令:
Add-Migration InitialCreate Update-Database
这会创建一个
Migrations文件夹,并根据你的模型生成一个todo.db数据库文件。
步骤 5:创建 Razor 页面
-
在
Pages文件夹上右键 -> 添加 -> 新建项。 -
选择 “Razor 页面 - 空”,命名为
TodoList.cshtml。 -
TodoList.cshtml.cs (后端代码):
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using MyFirstWebApp.Models; using System.Linq; namespace MyFirstWebApp.Pages { public class TodoListModel : PageModel { private readonly TodoDbContext _context; public TodoListModel(TodoDbContext context) { _context = context; } public List<TodoItem> TodoItems { get; set; } = new(); public void OnGet() { TodoItems = _context.TodoItems.ToList(); } public IActionResult OnPostAddItem(string task) { if (!string.IsNullOrEmpty(task)) { var newItem = new TodoItem { Task = task, IsDone = false }; _context.TodoItems.Add(newItem); _context.SaveChanges(); } return RedirectToPage(); } public IActionResult OnPostToggleDone(int id) { var item = _context.TodoItems.Find(id); if (item != null) { item.IsDone = !item.IsDone; _context.SaveChanges(); } return RedirectToPage(); } } } -
TodoList.cshtml (前端视图):
@page @model MyFirstWebApp.Pages.TodoListModel @{ ViewData["Title"] = "待办事项"; } <h1>我的待办事项</h1> <form method="post"> <div class="input-group"> <input type="text" name="task" class="form-control" placeholder="输入新任务..." /> <button type="submit" asp-page-handler="AddItem" class="btn btn-primary">添加</button> </div> </form> <hr /> <ul class="list-group"> @foreach (var item in Model.TodoItems) { <li class="list-group-item @(item.IsDone ? "list-group-item-secondary" : "")"> <div class="d-flex justify-content-between align-items-center"> <span>@item.Task</span> <form method="post"> <input type="hidden" name="id" value="@item.Id" /> <button type="submit" asp-page-handler="ToggleDone" class="btn btn-sm btn-outline-secondary"> @(item.IsDone ? "标记未完成" : "标记完成") </button> </form> </div> </li> } </ul>
步骤 6:添加链接和运行
打开 Pages/Index.cshtml,在导航栏中添加一个指向待办事项列表的链接:
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container-fluid">
<a class="navbar-brand" asp-area="" asp-page="/Index">MyFirstWebApp</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Index">首页</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/TodoList">待办事项</a> <!-- 添加这一行 -->
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Privacy">隐私</a>
</li>
</ul>
</div>
</div>
</nav>
现在运行项目,点击导航栏的 “待办事项”,你就可以添加、查看和标记任务完成了!
部署你的网站
网站开发完成后,需要部署到服务器上才能被用户访问。
-
发布网站:
- 在 Visual Studio 中,右键点击你的项目 -> “发布”。
- 选择 “文件夹”、“FTP” 或 “Azure App Service” 等目标。
- Visual Studio 会编译你的项目并生成所有必要的文件到一个文件夹中。
-
部署到服务器:
- Windows Server + IIS:最传统的部署方式,在 Windows Server 上安装 IIS,然后将发布后的文件复制到网站目录即可。
- Linux Server + Nginx/Apache:因为 ASP.NET Core 是跨平台的,你可以部署到任何 Linux 服务器,使用 Nginx 或 Apache 作为反向代理,将请求转发到运行中的 Kestrel 服务器。
- Docker 容器:将你的应用打包成一个 Docker 镜像,然后运行在任何支持 Docker 的环境中,这是现代应用部署的推荐方式,因为它提供了环境一致性和高可移植性。
- 云平台:如 Azure App Service、AWS Elastic Beanstalk、Google Cloud App Engine 等,这些平台提供了最简单、最便捷的部署和管理方式,通常会自动处理负载均衡、扩展和健康检查。
学习资源和最佳实践
- 官方文档:ASP.NET Core 文档 是最权威、最全面的学习资料。
- Visual Studio 文档:Visual Studio 文档
- 最佳实践:
- 关注点分离:严格遵守 MVC/Razor Pages 的职责划分。
- 依赖注入:尽量通过构造函数注入依赖,而不是在类中直接
new对象,这有利于单元测试和解耦。 - 使用异步编程:在处理 I/O 操作(如数据库查询、网络请求)时,始终使用
async和await,以提高应用的吞吐量。 - 安全性:始终对用户输入进行验证和编码,使用 ASP.NET Core 内置的身份验证和授权机制。
- 性能:启用编译、使用响应缓存、优化数据库查询等。
希望这份详细的指南能帮助你顺利开启 ASP.NET 网站开发之旅!祝你编码愉快!
