ASP.NET 程序设计教程:从入门到实战
ASP.NET 是由微软开发的一个用于构建 Web 应用程序的强大框架,它已经历了多个重大版本,目前的主流是 ASP.NET Core,本教程将主要围绕 ASP.NET Core 展开,因为它是现代、跨平台、高性能的未来方向。

目录
-
第一部分:基础入门
- 什么是 ASP.NET?
- 为什么选择 ASP.NET Core?
- 开发环境搭建
- 创建你的第一个 ASP.NET Core 应用
- 理解项目结构
-
第二部分:核心概念
- MVC 架构模式
- 路由
- 控制器
- 视图
- 模型
-
第三部分:数据交互
- Entity Framework Core 介绍
- 数据库迁移
- CRUD 操作(增删改查)
- 数据验证
-
第四部分:进阶与实战
(图片来源网络,侵删)- 身份验证与授权
- API 开发
- 依赖注入
- 使用前端框架(如 Blazor, Vue, React)
- 部署应用
第一部分:基础入门
什么是 ASP.NET?
ASP.NET 是一个用于在服务器上构建动态 Web 站点和 Web 应用程序的框架,它允许开发者使用 C#(或 VB.NET)等 .NET 语言来编写服务器端逻辑,生成 HTML、CSS 和 JavaScript 响应给客户端浏览器。
为什么选择 ASP.NET Core?
- 跨平台:可以在 Windows、Linux 和 macOS 上运行。
- 开源:完全开源,拥有活跃的社区。
- 高性能:经过高度优化,性能卓越。
- 云原生:为云部署而设计,支持容器化(Docker)。
- 模块化:采用 NuGet 包的形式,你可以按需引入功能,使应用更轻量。
- 统一框架:使用同一套框架构建 Web UI (MVC/Razor Pages) 和 Web API。
开发环境搭建
你需要安装以下工具:
-
.NET SDK (Software Development Kit):
- 下载地址:https://dotnet.microsoft.com/download
- SDK 包含了运行和构建 .NET 应用所需的一切,安装它会自动安装
dotnet命令行工具。
-
代码编辑器:
(图片来源网络,侵删)- Visual Studio Code (VS Code):免费、轻量级、跨平台,强烈推荐。
- Visual Studio (Community Edition):功能最强大的 IDE,提供丰富的调试和设计工具,Windows 平台首选。
-
(可选) 数据库:
- SQL Server Express LocalDB:Visual Studio 安装时会附带一个轻量版的 SQL Server,非常适合本地开发。
- SQLite:一个轻量级的文件数据库,无需安装服务器,非常适合初学者。
创建你的第一个 ASP.NET Core 应用
打开终端或命令提示符,运行以下命令:
# 创建一个新的 Web 应用项目 dotnet new mvc -o MyFirstWebApp # 进入项目目录 cd MyFirstWebApp # 运行项目 dotnet run
执行 dotnet run 后,终端会显示类似下面的信息:
info: Microsoft.Hosting.Lifetime[14]
Now listening on: https://localhost:7123
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5123
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
打开你的浏览器,访问 https://localhost:7123(端口号可能不同),你将看到 ASP.NET Core 的默认欢迎页面。
理解项目结构
使用 VS Code 或 Visual Studio 打开 MyFirstWebApp 项目,你会看到以下关键文件夹:
Controllers/:存放控制器类,控制器负责接收 HTTP 请求,处理业务逻辑,并返回响应。Models/:存放数据模型类,模型定义了你的应用数据结构,并包含业务验证逻辑。Views/:存放 Razor 视图文件(.cshtml),视图负责生成 HTML 页面展示给用户。wwwroot/:存放静态文件,如 CSS、JavaScript、图片等。Program.cs:应用的入口点,在这里配置服务(如数据库、中间件)和请求处理管道。appsettings.json:存放应用的配置信息,如数据库连接字符串、日志级别等。
第二部分:核心概念
MVC 架构模式
ASP.NET Core MVC 是一种实现“模型-视图-控制器”设计模式的框架。
- 模型:应用程序的数据和业务逻辑,它独立于用户界面。
- 视图:用户界面,它从模型获取数据并展示给用户。
- 控制器:接收用户输入(通过浏览器请求),调用模型处理数据,然后选择一个视图来展示结果,它是模型和视图之间的协调者。
工作流程:
- 用户在浏览器中输入 URL 并发送请求。
- 路由系统将请求映射到对应的控制器和动作方法。
- 控制器执行动作方法,可能调用模型进行数据处理。
- 控制器选择一个视图,并将模型数据传递给该视图。
- 视图使用模型数据渲染成 HTML。
- 服务器将 HTML 响应返回给用户的浏览器。
路由
路由是连接 URL 和控制器动作的机制,在 Program.cs 中,你可以看到默认的路由配置:
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
{controller=Home}:默认控制器是Home。{action=Index}:默认动作方法是Index。{id?}:可选的id参数。
访问 /Home/Details/5,会被解析为:调用 HomeController 控制器的 Details 动作方法,并传入 id = 5。
控制器
控制器是一个类,继承自 Controller 基类,它包含多个公共方法,称为“动作方法”。
示例:Controllers/HomeController.cs
using Microsoft.AspNetCore.Mvc;
namespace MyFirstWebApp.Controllers
{
public class HomeController : Controller
{
public IActionResult Index()
{
return View(); // 返回一个与动作方法同名的视图
}
public IActionResult Welcome(string name, int numTimes = 1)
{
ViewData["Message"] = "Hello " + name;
ViewData["NumTimes"] = numTimes;
return View();
}
}
}
视图
视图使用 Razor 语法,这是一种在 HTML 中嵌入 C# 代码的标记语言。
示例:Views/Home/Welcome.cshtml
@{
ViewData["Title"] = "Welcome";
}
<h2>Welcome</h2>
<ul>
@for (int i = 0; i < (int)ViewData["NumTimes"]; i++)
{
<li>@ViewData["Message"]</li>
}
</ul>
- 符号用于切换到 C# 模式。
ViewData是一个字典对象,用于从控制器向视图传递数据。
模型
模型是简单的 C# 类(POCO - Plain Old CLR Object),用于表示数据。
示例:在 Models/ 文件夹下创建 Movie.cs
namespace MyFirstWebApp.Models
{
public class Movie
{
public int Id { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
}
}
第三部分:数据交互
Entity Framework Core (EF Core) 介绍
EF Core 是微软官方的对象关系映射器,它让你可以用 C# 对象(模型)来操作数据库,而无需编写 SQL 语句。
- Code-First:你先定义 C# 模型类,EF Core 根据这些类生成数据库结构,这是最常用的方式。
数据库迁移
迁移是 EF Core 管理数据库架构变化的机制。
步骤:
-
安装 EF Core 包: 在终端中运行:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer dotnet add package Microsoft.EntityFrameworkCore.Design
-
创建
DbContext:DbContext是 EF Core 与数据库交互的主要类。// Models/MovieDbContext.cs using Microsoft.EntityFrameworkCore; namespace MyFirstWebApp.Models { public class MovieDbContext : DbContext { public MovieDbContext(DbContextOptions<MovieDbContext> options) : base(options) { } public DbSet<Movie> Movies { get; set; } } } -
注册 DbContext: 在
Program.cs中注册服务。// Program.cs using MyFirstWebApp.Models; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); // 注册 DbContext builder.Services.AddDbContext<MovieDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))); var app = builder.Build(); // ... 其余代码并在
appsettings.json中添加连接字符串:{ "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MovieDb;Trusted_Connection=True;MultipleActiveResultSets=true" }, // ... } -
创建和应用迁移:
# 创建初始迁移 dotnet ef migrations add InitialCreate # 将迁移应用到数据库 dotnet ef database update
执行后,LocalDB 中会创建一个名为
MovieDb的数据库,并包含一个Movies表。
CRUD 操作
控制器中实现 CRUD:
// Controllers/MoviesController.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using MyFirstWebApp.Models;
public class MoviesController : Controller
{
private readonly MovieDbContext _context;
public MoviesController(MovieDbContext context)
{
_context = context;
}
// GET: Movies
public async Task<IActionResult> Index()
{
return View(await _context.Movies.ToListAsync());
}
// GET: Movies/Details/5
public async Task<IActionResult> Details(int? id)
{
if (id == null) return NotFound();
var movie = await _context.Movies.FirstOrDefaultAsync(m => m.Id == id);
if (movie == null) return NotFound();
return View(movie);
}
// GET: Movies/Create
public IActionResult Create()
{
return View();
}
// POST: Movies/Create
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Title,ReleaseDate,Genre,Price")] Movie movie)
{
if (ModelState.IsValid)
{
_context.Add(movie);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(movie);
}
// ... (Update 和 Delete 方法类似)
}
数据验证
在模型类中使用数据注解来定义验证规则。
// Models/Movie.cs
using System.ComponentModel.DataAnnotations;
public class Movie
{
public int Id { get; set; }
[Required]
[StringLength(100)]
public string Title { get; set; }
[DataType(DataType.Date)]
[Display(Name = "Release Date")]
public DateTime ReleaseDate { get; set; }
[StringLength(30)]
public string Genre { get; set; }
[Range(0, 100)]
[DataType(DataType.Currency)]
public decimal Price { get; set; }
}
在视图中,<input asp-for="Title"> 会自动应用这些验证规则,并在提交时进行客户端和服务器端验证。
第四部分:进阶与实战
身份验证与授权
ASP.NET Core 内置了强大的身份验证系统,支持多种登录方式(如 Cookie、JWT、OAuth)。
- 身份验证:确定“你是谁?”(登录)。
- 授权:确定“你能做什么?”(只有管理员才能删除电影)。
在 Program.cs 中添加身份验证服务:
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/Account/Login";
});
app.UseAuthentication(); // 必须在 UseRouting 之后,UseAuthorization 之前
app.UseAuthorization();
API 开发
ASP.NET Core MVC 也可以轻松构建 RESTful API,API 控制器通常返回 JSON 数据。
// Controllers/MoviesApiController.cs
[ApiController]
[Route("api/[controller]")]
public class MoviesApiController : ControllerBase
{
private readonly MovieDbContext _context;
public MoviesApiController(MovieDbContext context)
{
_context = context;
}
[HttpGet]
public async Task<ActionResult<IEnumerable<Movie>>> GetMovies()
{
return await _context.Movies.ToListAsync();
}
[HttpGet("{id}")]
public async Task<ActionResult<Movie>> GetMovie(int id)
{
var movie = await _context.Movies.FindAsync(id);
if (movie == null) return NotFound();
return movie;
}
// ...
}
依赖注入
依赖注入是 ASP.NET Core 的核心设计模式,它使得组件之间的耦合度降低,代码更易于测试和维护,我们在 MoviesController 中通过构造函数注入 MovieDbContext 就是典型的 DI 应用。
使用前端框架
你可以将 ASP.NET Core 作为后端 API,使用现代前端框架(如 Vue.js, React, Angular)来构建用户界面,ASP.NET Core 提供了 Blazor 框架,允许你使用 C# 和 Razor 语法在浏览器中构建交互式 UI,实现前后端统一。
部署应用
开发完成后,你需要将应用部署到服务器上。
-
发布应用:
dotnet publish -c Release -o ./publish
这会生成一个包含所有依赖项的文件夹,可以将其复制到服务器上运行。
-
部署选项:
- IIS (Windows Server):传统部署方式。
- Azure App Service:微软云平台,一键部署,非常方便。
- Docker 容器:将应用打包成 Docker 镜像,在任何支持 Docker 的环境中运行,实现一致性。
学习资源推荐
- 微软官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/ - 最权威、最全面的资源。
- ASP.NET Core 教程 (Razor Pages):https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/razor-pages/
- Channel 9:微软官方的视频教程频道,有很多高质量的 ASP.NET Core 课程。
- GitHub:阅读优秀开源项目的源码是提升技能的最佳途径。
这份教程为你勾勒出了 ASP.NET Core 开发的完整路径,最好的学习方式是动手实践,从一个简单的项目开始,逐步添加功能,不断探索和解决遇到的问题,祝你学习愉快!
