本教程将从零开始,系统地介绍 ASP.NET 的核心概念、技术栈和最佳实践,旨在帮助您从入门到精通,成为一名合格的 ASP.NET 开发者。
ASP.NET 网络编程标准教程
目录
-
第一部分:入门基础
- 第1章:ASP.NET 简介
- 第2章:开发环境搭建
- 第3章:创建第一个 ASP.NET Core 应用
- 第4章:理解请求-响应模型
-
第二部分:核心概念
- 第5章:MVC 架构模式
- 第6章:控制器
- 第7章:视图
- 第8章:模型
- 第9章:路由
-
第三部分:数据交互
- 第10章:表单与模型绑定
- 第11章:数据验证
- 第12章:Entity Framework Core (EF Core) 入门
- 第13章:数据库操作:增删改查
-
第四部分:进阶技术
- 第14章:依赖注入
- 第15章:中间件
- 第16章:身份认证与授权
- 第17章:API 开发 (Web API)
- 第18章:前端集成:Razor Pages 与 Blazor
-
第五部分:部署与优化
- 第19章:应用部署
- 第20章:性能优化与日志记录
第一部分:入门基础
第1章:ASP.NET 简介
1 什么是 ASP.NET? ASP.NET 是由微软开发的一个用于构建 Web 应用、Web API 和移动后端服务的、跨平台的、高性能的开源框架,它运行在 .NET 运行时之上。
2 ASP.NET 的演变
- ASP.NET (经典):基于 .NET Framework,仅支持 Windows IIS 服务器。
- ASP.NET Core:全新的、开源的、跨平台的框架,是当前和未来的主流,它从零开始重构,性能更高,模块化更强,支持 Linux 和 macOS。
3 为什么选择 ASP.NET Core?
- 跨平台:可在 Windows, Linux, macOS 上开发和运行。
- 高性能:在各大 Web 框架性能测试中名列前茅。
- 开源:拥有活跃的社区和持续的创新。
- 模块化:通过 NuGet 包管理,可以按需引入功能,轻量级。
- 统一框架:使用同一套技术栈构建 Web UI (MVC/Razor Pages) 和 Web API。
第2章:开发环境搭建
1 安装 .NET SDK .NET SDK (Software Development Kit) 包含了运行和开发 .NET 应用所需的一切,访问 .NET 官网 下载并安装最新的 LTS (长期支持) 版本。
2 选择代码编辑器
- Visual Studio (推荐):微软官方的集成开发环境,功能强大,对 .NET 支持最好,推荐安装 Visual Studio 2025 Community (免费版)。
- Visual Studio Code:轻量级、跨平台的代码编辑器,配合 C# 扩展,也能提供良好的开发体验。
3 验证安装 打开命令行工具 (如 PowerShell 或 CMD),输入以下命令:
dotnet --version
如果显示版本号,则说明安装成功。
第3章:创建第一个 ASP.NET Core 应用
我们将使用命令行工具创建一个最简单的 Web 应用。
-
创建项目
# 创建一个名为 MyFirstApp 的文件夹并进入 mkdir MyFirstApp cd MyFirstApp # 创建一个名为 "web" 的 ASP.NET Core MVC 应用 dotnet new mvc -o MyFirstApp
-
运行项目
# 进入项目目录 cd MyFirstApp # 运行应用 dotnet run
-
查看结果 命令行会显示类似以下信息:
info: Microsoft.Hosting.Lifetime[14] Now listening on: https://localhost:7123 info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:5123打开浏览器,访问
https://localhost:7123,你将看到一个欢迎页面。
第4章:理解请求-响应模型
这是所有 Web 应用的核心工作方式。
- 请求:当你在浏览器中输入一个 URL 并回车时,浏览器会向服务器发送一个 HTTP 请求,这个请求包含了方法(如 GET, POST)、URL、协议版本、请求头和请求体等信息。
- 响应:服务器接收到请求后,进行处理,然后返回一个 HTTP 响应,这个响应包含了状态码(如 200 OK, 404 Not Found)、响应头和响应体(通常是 HTML 页面、JSON 数据等)。
在 ASP.NET Core 中,一个中间件 就是一个处理 HTTP 请求和响应的组件,它们像一条管道,请求依次通过每个中间件,响应再依次反向返回。app.Run() 是最简单的中间件,它直接处理请求并生成响应。
第二部分:核心概念
第5章:MVC 架构模式
ASP.NET Core MVC 是一种使用 Model-View-Controller (M-VC) 设计模式来构建 Web 应用的框架。
- Model (模型):代表应用程序的数据和业务逻辑,它负责与数据库交互,并对数据进行验证。
- View (视图):是用户界面,它负责展示从 Model 获取的数据,并允许用户与界面交互。
- Controller (控制器):是 Model 和 View 之间的协调者,它接收来自用户的输入(通过 HTTP 请求),调用 Model 处理数据,然后选择一个 View 来向用户展示结果。

第6章:控制器
控制器是一个公共类,继承自 ControllerBase (用于 API) 或 Controller (用于 MVC,提供视图功能)。
示例:HomeController.cs
using Microsoft.AspNetCore.Mvc;
namespace MyFirstApp.Controllers
{
public class HomeController : Controller
{
// 这是一个 Action 方法,处理对 "/" 或 "/Home/Index" 的 GET 请求
public IActionResult Index()
{
// 返回一个 ViewResult,会默认 Views/Home/Index.cshtml 视图
return View();
}
public IActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
}
}
- Action 方法:控制器中处理请求的公共方法,其返回类型通常是
IActionResult。 - ViewBag:一个动态对象,用于在控制器和视图之间传递少量数据。
第7章:视图
视图是使用 Razor 语法 的 .cshtml 文件,Razor 是一种允许你在 HTML 中嵌入 C# 代码的标记语法。
示例:Views/Home/Index.cshtml
@{
ViewData["Title"] = "Home Page";
}
<div class="text-center">
<h1 class="display-4">Welcome</h1>
<p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>
- 符号:用于切换到 C# 代码模式。
- 用于执行多行 C# 代码。
@variable:用于输出变量的值。
第8章:模型
模型是一个普通的 C# 类(或 POCO - Plain Old CLR Object),用于表示数据。
示例:Models/Person.cs
namespace MyFirstApp.Models
{
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
}
这个模型可以在控制器中创建,并传递给视图进行展示。
第9章:路由
路由是确定哪个 Action 方法应该处理传入请求的机制,ASP.NET Core 使用 约定式路由。
默认的 MVC 路由模板在 Program.cs 中定义:
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
这个模板的含义是:
{controller}:控制器名,默认是Home。{action}:Action 方法名,默认是Index。{id?}:可选的参数。 表示它不是必需的。
请求 /Products/Details/5 会被映射到 ProductsController 的 Details(int id) 方法,id 的值是 5。
第三部分:数据交互
第10章:表单与模型绑定
模型绑定是 ASP.NET Core 的一个强大功能,它能自动将 HTTP 请求中的数据映射到 Action 方法的参数中。
示例:在视图中创建表单
@model MyFirstApp.Models.Person
<h2>Create Person</h2>
<form asp-action="Create">
<div>
<label asp-for="Name"></label>
<input asp-for="Name" />
</div>
<div>
<label asp-for="Age"></label>
<input asp-for="Age" type="number" />
</div>
<button type="submit">Create</button>
</form>
asp-for:Razor 标签助手,会自动生成label和input的name和id属性,并与模型属性绑定。
示例:在控制器中接收数据
[HttpPost] // 确保这个 Action 只处理 POST 请求
public IActionResult Create(Person person)
{
if (ModelState.IsValid)
{
// 数据验证通过,保存到数据库...
return RedirectToAction("Success"); // 重定向到成功页面
}
// 如果验证失败,返回带有错误信息的表单
return View(person);
}
第11章:数据验证
通过在模型类上添加数据注解,可以轻松实现客户端和服务器端验证。
示例:修改 Person 模型
using System.ComponentModel.DataAnnotations;
namespace MyFirstApp.Models
{
public class Person
{
public int Id { get; set; }
[Required(ErrorMessage = "Name is required.")]
[StringLength(50, MinimumLength = 2)]
public string Name { get; set; }
[Range(0, 120)]
public int Age { get; set; }
}
}
[Required]:属性是必需的。[StringLength]:字符串长度限制。[Range]:数值范围限制。
当模型绑定失败时,ModelState.IsValid 会返回 false,Razor 视图会自动显示验证错误信息。
第12章:Entity Framework Core (EF Core) 入门
EF Core 是微软官方的对象关系映射器,它让你可以用 C# 对象来操作数据库,而无需编写 SQL 语句。
-
安装 EF Core
dotnet add package Microsoft.EntityFrameworkCore.SqlServer dotnet add package Microsoft.EntityFrameworkCore.Tools
-
创建数据库上下文 数据库上下文是 EF Core 的核心,它协调模型和数据库的交互。
using Microsoft.EntityFrameworkCore; using MyFirstApp.Models; namespace MyFirstApp.Data { public class AppDbContext : DbContext { public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } // 将 Person 模型映射到数据库中的表 public DbSet<Person> People { get; set; } } } -
配置数据库连接 在
appsettings.json中添加连接字符串。{ "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyFirstAppDb;Trusted_Connection=True;MultipleActiveResultSets=true" } // ... other settings }在
Program.cs中注册上下文。using MyFirstApp.Data; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddDbContext<AppDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))); builder.Services.AddControllersWithViews(); // ...
第13章:数据库操作:增删改查
我们可以在控制器中使用 AppDbContext 来进行数据库操作。
示例:PeopleController.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using MyFirstApp.Data;
using MyFirstApp.Models;
public class PeopleController : Controller
{
private readonly AppDbContext _context;
public PeopleController(AppDbContext context)
{
_context = context;
}
// GET: /People
public async Task<IActionResult> Index()
{
var people = await _context.People.ToListAsync();
return View(people);
}
// POST: /People/Create
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Name,Age")] Person person)
{
if (ModelState.IsValid)
{
_context.Add(person);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(person);
}
// ... 其他 Delete, Edit, Details 方法
}
async/await:用于异步操作,避免阻塞服务器线程,提高并发性能。_context.People:访问People数据库表。Add(),SaveChangesAsync(),ToListAsync():EF Core 提供的核心方法。
第四部分:进阶技术
第14章:依赖注入
依赖注入是 ASP.NET Core 的核心设计原则,它是一种设计模式,用于实现控制反转,在 ASP.NET Core 中,容器会自动创建对象(服务)并将其注入到需要它的类(如控制器)中。
-
注册服务:在
Program.cs中,使用builder.Services注册你的服务。// 将 AppDbContext 注册为服务,生命周期为 "Scoped" (每个请求一个实例) builder.Services.AddDbContext<AppDbContext>(options => ...);
-
使用服务:在类的构造函数中声明你需要的依赖项。
public class PeopleController : Controller { private readonly AppDbContext _context; // AppDbContext 实例由容器注入 // 构造函数注入 public PeopleController(AppDbContext context) { _context = context; } }
第15章:中间件
中间件是组装到应用程序管道中以处理请求和响应的软件,每个中间件:
- 可以选择将请求传递到管道中的下一个中间件。
- 可以在管道中的下一个中间件执行前后执行工作。
自定义中间件示例
// 自定义一个记录请求时间的中间件
public class TimingMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger<TimingMiddleware> _logger;
public TimingMiddleware(RequestDelegate next, ILogger<TimingMiddleware> logger)
{
_next = next;
_logger = logger;
}
public async Task Invoke(HttpContext context)
{
var startTime = DateTime.UtcNow;
_logger.LogInformation($"Request started at: {startTime}");
// 调用管道中的下一个中间件
await _next(context);
var endTime = DateTime.UtcNow;
var duration = endTime - startTime;
_logger.LogInformation($"Request took: {duration.TotalMilliseconds} ms");
}
}
// 在 Program.cs 中注册中间件
app.UseMiddleware<TimingMiddleware>();
第16章:身份认证与授权
- 认证:确定“你是谁?”的过程,通过用户名和密码登录。
- 授权:确定“你能做什么?”的过程,只有管理员才能删除用户。
ASP.NET Core 提供了内置的身份认证和授权系统。
启用认证
在 Program.cs 中添加认证服务。
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/Account/Login"; // 未登录用户的重定向路径
});
app.UseAuthentication(); // 必须在 UseAuthorization 之前
app.UseAuthorization();
应用授权特性
在控制器或 Action 方法上使用 [Authorize] 特性。
[Authorize] // 只有已登录用户才能访问
public IActionResult Dashboard()
{
return View();
}
[Authorize(Roles = "Admin")] // 只有角色为 "Admin" 的用户才能访问
public IActionResult DeleteUser(int id)
{
// ...
}
第17章:API 开发
ASP.NET Core 使用 MVC 或 Minimal APIs 来构建 Web API。
使用 MVC 构建API
创建一个继承自 ControllerBase 的控制器,并返回特定的数据类型(如 IActionResult 或具体的对象)。
示例:WeatherForecastController.cs
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
// ...
return forecasts;
}
}
[ApiController]:提供 API 特定的功能,如自动模型验证和 400 响应。[Route]:定义控制器的路由前缀。[HttpGet]:指定此 Action 处理 HTTP GET 请求。ControllerBase:不包含与视图相关的功能,更适合 API 开发。
第18章:前端集成:Razor Pages 与 Blazor
- Razor Pages:比 MVC 更简单的模型,特别用于构建页面为中心的应用,每个
.cshtml文件都有一个对应的.cs文件(Page Model),代码组织更直观。 - Blazor:一个革命性的框架,允许你使用 C# 和 HTML/Razor 来构建交互式客户端 Web UI,而无需 JavaScript,Blazor 支持 WebAssembly (在浏览器中运行) 和 Server (在服务器上运行) 两种模式。
第五部分:部署与优化
第19章:应用部署
将开发好的应用部署到服务器上,使其可以被公众访问。
部署到 IIS (Windows)
- 发布应用:在 Visual Studio 中右键项目 -> "发布",选择文件夹目标,生成发布文件。
# 命令行方式 dotnet publish -c Release -o ./publish
- 在 IIS 中创建网站:指向发布文件夹的物理路径。
- 安装 .NET Hosting Bundle:确保 IIS 能够运行 .NET Core 应用。
- 配置应用程序池:将 .NET CLR 版本设置为 "无托管代码"。
部署到 Docker
-
创建 Dockerfile:定义如何构建和运行 Docker 镜像。
# 使用官方 .NET SDK 镜像作为构建环境 FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /src COPY ["MyFirstApp.csproj", "."] RUN dotnet restore "MyFirstApp.csproj" COPY . . WORKDIR "/src/." RUN dotnet build "MyFirstApp.csproj" -c Release -o /app/build # 使用官方 .NET 运行时镜像作为运行环境 FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM build AS publish RUN dotnet publish "MyFirstApp.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "MyFirstApp.dll"]
-
构建并运行镜像:
docker build -t my-first-app . docker run -d -p 8080:80 --name my-running-app my-first-app
第20章:性能优化与日志记录
-
日志记录:使用内置的日志系统,将应用运行时的信息记录下来,便于调试和监控。
// 在控制器或服务中注入 ILogger private readonly ILogger<HomeController> _logger; public HomeController(ILogger<HomeController> logger) { _logger = logger; } public IActionResult Index() { _logger.LogInformation("Home page accessed at {Time}", DateTime.UtcNow); // ... } -
性能优化:
- 异步编程:广泛使用
async/await,避免 I/O 操作阻塞线程。 - 缓存:使用
IMemoryCache或IDistributedCache缓存频繁访问的数据。 - 数据库优化:对数据库查询进行分析,使用索引,避免 N+1 查询问题。
- 静态文件优化:使用
UseStaticFiles中间件,并配置缓存策略。
- 异步编程:广泛使用
总结与学习路径
- 基础阶段:掌握第一、二部分,理解请求-响应、MVC、路由、视图和模型。
- 数据阶段:精通第三部分,熟练使用表单、验证和 EF Core 进行数据操作。
- 进阶阶段:学习第四部分,理解 DI、中间件、认证授权,并掌握 API 开发。
- 实战阶段:完成一个完整的项目,如博客系统、电商后台等,并学习第五部分的部署和优化。
ASP.NET Core 是一个功能强大且不断发展的框架,保持学习的热情,多实践,多阅读官方文档,你一定能成为一名优秀的 ASP.NET 开发者,祝你学习愉快!
