专栏导航
← 上一篇:正则表达式入门 - 文本匹配利器
← 第一篇:编程世界初探
互联网与 Web 应用简介
- 专栏导航
-
- [一、互联网与 Web 应用](#一、互联网与 Web 应用)
-
- [1.1 什么是 Web 应用?](#1.1 什么是 Web 应用?)
-
- [Web 应用 vs 桌面应用](#Web 应用 vs 桌面应用)
- [1.2 互联网基础](#1.2 互联网基础)
-
- 客户端与服务器
- [IP 地址与域名](#IP 地址与域名)
- [二、HTTP 协议](#二、HTTP 协议)
-
- [2.1 什么是 HTTP?](#2.1 什么是 HTTP?)
- [2.2 HTTP 请求与响应](#2.2 HTTP 请求与响应)
- [2.3 常见 HTTP 方法](#2.3 常见 HTTP 方法)
- [2.4 常见状态码](#2.4 常见状态码)
- [三、URL 详解](#三、URL 详解)
-
- [3.1 URL 结构](#3.1 URL 结构)
- [3.2 URL 示例](#3.2 URL 示例)
- [四、ASP.NET Core 简介](#四、ASP.NET Core 简介)
- [五、Minimal API 详解](#五、Minimal API 详解)
-
- [5.1 什么是 Minimal API?](#5.1 什么是 Minimal API?)
-
- [Minimal API 的特点](#Minimal API 的特点)
- [5.2 Minimal API 示例](#5.2 Minimal API 示例)
-
- [5.2.1 创建 Minimal API 项目](#5.2.1 创建 Minimal API 项目)
- [5.2.2 编写 Minimal API](#5.2.2 编写 Minimal API)
- [5.3 Minimal API 的路由](#5.3 Minimal API 的路由)
- [六、MVC 模式详解](#六、MVC 模式详解)
-
- [6.1 什么是 MVC?](#6.1 什么是 MVC?)
-
- [MVC 三个组件](#MVC 三个组件)
- [MVC 的工作流程](#MVC 的工作流程)
- [6.2 MVC 的特点](#6.2 MVC 的特点)
- [6.3 创建 MVC 项目](#6.3 创建 MVC 项目)
-
- [6.3.1 使用 Visual Studio 创建](#6.3.1 使用 Visual Studio 创建)
- [6.3.2 使用命令行创建](#6.3.2 使用命令行创建)
- [6.4 MVC 项目结构](#6.4 MVC 项目结构)
- [6.5 MVC 示例:图书管理](#6.5 MVC 示例:图书管理)
-
- [6.5.1 创建模型 (Model)](#6.5.1 创建模型 (Model))
- [6.5.2 创建控制器 (Controller)](#6.5.2 创建控制器 (Controller))
- [6.5.3 创建视图 (View)](#6.5.3 创建视图 (View))
- [七、Minimal API vs MVC 深度对比](#七、Minimal API vs MVC 深度对比)
-
- [7.1 代码量对比](#7.1 代码量对比)
-
- [Minimal API 版本(5 行代码)](#Minimal API 版本(5 行代码))
- [MVC 版本(需要 3 个文件)](#MVC 版本(需要 3 个文件))
- [7.2 功能对比表](#7.2 功能对比表)
- [7.3 适用场景](#7.3 适用场景)
-
- [Minimal API 适合的场景](#Minimal API 适合的场景)
- [MVC 适合的场景](#MVC 适合的场景)
- [7.4 如何选择?](#7.4 如何选择?)
-
- [选择 Minimal API,如果:](#选择 Minimal API,如果:)
- [选择 MVC,如果:](#选择 MVC,如果:)
- [7.5 混合使用](#7.5 混合使用)
- [八、创建第一个 ASP.NET Core 应用](#八、创建第一个 ASP.NET Core 应用)
-
- [5.1 安装开发工具](#5.1 安装开发工具)
- [5.2 创建项目(使用 Visual Studio)](#5.2 创建项目(使用 Visual Studio))
- [5.3 创建项目(使用命令行)](#5.3 创建项目(使用命令行))
- [5.4 项目结构](#5.4 项目结构)
- [5.5 理解 Program.cs](#5.5 理解 Program.cs)
- [六、第一个 Web API](#六、第一个 Web API)
-
- [6.1 创建控制器](#6.1 创建控制器)
- [6.2 测试 API](#6.2 测试 API)
- [6.3 理解控制器特性](#6.3 理解控制器特性)
- [七、完整示例:图书管理 API](#七、完整示例:图书管理 API)
-
- [7.1 创建数据模型](#7.1 创建数据模型)
- [7.2 创建控制器](#7.2 创建控制器)
- [7.3 测试 API](#7.3 测试 API)
- 九、安装开发工具
-
- [9.1 安装 Visual Studio 2022](#9.1 安装 Visual Studio 2022)
- [9.2 使用 .NET SDK + VS Code](#9.2 使用 .NET SDK + VS Code)
- [十、第一个 Web API 实践](#十、第一个 Web API 实践)
-
- [10.1 使用 Visual Studio 创建 Web API 项目](#10.1 使用 Visual Studio 创建 Web API 项目)
- [10.2 使用命令行创建 Web API 项目](#10.2 使用命令行创建 Web API 项目)
- [10.3 项目结构](#10.3 项目结构)
- [10.4 理解 Program.cs](#10.4 理解 Program.cs)
- [10.5 第一个控制器示例(MVC 模式)](#10.5 第一个控制器示例(MVC 模式))
- [10.6 第一个 Minimal API 示例](#10.6 第一个 Minimal API 示例)
- [10.7 测试 API](#10.7 测试 API)
- [10.8 理解控制器特性](#10.8 理解控制器特性)
- 十一、本周小结
一、互联网与 Web 应用
1.1 什么是 Web 应用?
Web 应用(Web Application)是一种通过浏览器访问的应用程序。它运行在服务器上,用户通过浏览器(如 Chrome、Edge、Firefox)来使用。
Web 应用 vs 桌面应用
| 特性 | Web 应用 | 桌面应用 |
|---|---|---|
| 访问方式 | 浏览器 | 安装程序 |
| 跨平台 | ✅ 是 | ❌ 否(通常) |
| 更新方式 | 服务器更新 | 用户下载更新 |
| 离线使用 | ❌ 通常需要网络 | ✅ 可以 |
| 开发成本 | 较低 | 较高 |
常见的 Web 应用:
- 淘宝、京东(电商)
- 微博、知乎(社交)
- 百度、谷歌(搜索)
- 银行网银(金融)
- 在线教育平台(学习)
1.2 互联网基础
客户端与服务器
┌──────────────┐ ┌──────────────┐
│ 客户端 │ │ 服务器 │
│ (Client) │ │ (Server) │
│ │ │ │
│ - 浏览器 │◄─── HTTP 请求 ─────│ - 处理请求 │
│ - 手机App │──── HTTP 响应 ────►│ - 查询数据库│
│ - 电脑软件 │ │ - 返回数据 │
└──────────────┘ └──────────────┘
- 客户端:用户使用的设备(电脑、手机)和程序(浏览器)
- 服务器:提供服务的计算机,运行 Web 应用程序
IP 地址与域名
IP 地址:192.168.1.1 (数字标识,难以记忆)
域名: www.example.com (易记的名称)
- IP 地址:计算机在互联网上的唯一地址
- 域名:易记的名称,通过 DNS 解析为 IP 地址
二、HTTP 协议
2.1 什么是 HTTP?
HTTP(HyperText Transfer Protocol,超文本传输协议)是浏览器和服务器之间通信的规则。
2.2 HTTP 请求与响应
请求(Request)
浏览器向服务器发送的请求包含:
http
GET /books HTTP/1.1
Host: www.example.com
User-Agent: Chrome/120.0
关键组成部分:
- 请求方法:GET、POST、PUT、DELETE 等
- 请求路径 :
/books(访问的资源) - 请求头:Host、User-Agent 等信息
响应(Response)
服务器返回给浏览器的响应:
http
HTTP/1.1 200 OK
Content-Type: application/json
{
"books": [
{ "id": 1, "title": "C# 入门", "price": 89.5 }
]
}
关键组成部分:
- 状态码:200(成功)、404(未找到)、500(服务器错误)
- 响应头:Content-Type 等信息
- 响应体:实际的数据
2.3 常见 HTTP 方法
| 方法 | 作用 | 示例 |
|---|---|---|
| GET | 获取数据 | 获取图书列表 |
| POST | 提交数据 | 添加新图书 |
| PUT | 更新数据 | 修改图书信息 |
| DELETE | 删除数据 | 删除图书 |
2.4 常见状态码
| 状态码 | 含义 | 说明 |
|---|---|---|
| 200 | OK | 请求成功 |
| 201 | Created | 创建成功 |
| 400 | Bad Request | 请求参数错误 |
| 401 | Unauthorized | 未授权(需要登录) |
| 403 | Forbidden | 禁止访问(无权限) |
| 404 | Not Found | 资源不存在 |
| 500 | Internal Server Error | 服务器内部错误 |
三、URL 详解
3.1 URL 结构
https://www.example.com:443/products/category/books?id=123&sort=desc
│ │ │ │ │ │ │ │
│ │ │ │ │ │ └─ 查询参数 │
│ │ │ │ │ └─────── 路径 │
│ │ │ │ └────────────────── 资源 │
│ │ │ └─────────────────────────── 端口 │
│ │ └────────────────────────────── 主机 │
│ └─────────────────────────────────────────────── 域名 │
└────────────────────────────────────────────────────── 协议 │
- 协议 :
http://或https://(安全) - 域名:服务器地址
- 端口:默认 80(HTTP)、443(HTTPS)
- 路径:访问的具体资源
- 查询参数 :键值对,多个参数用
&连接
3.2 URL 示例
| URL | 说明 |
|---|---|
https://www.taobao.com |
淘宝首页 |
https://www.taobao.com/search?q=手机 |
搜索"手机" |
https://item.taobao.com/item.htm?id=123456 |
查看商品详情 |
https://user.taobao.com/profile |
用户中心 |
四、ASP.NET Core 简介
4.1 什么是 ASP.NET Core?
ASP.NET Core 是微软开发的跨平台、高性能 Web 开发框架,用于构建现代的 Web 应用程序和 API。
4.2 ASP.NET Core 的优势
✅ 跨平台 :可以在 Windows、Linux、macOS 上运行
✅ 高性能 :比传统 ASP.NET 更快
✅ 开源 :完全开源,社区活跃
✅ 现代化 :支持最新的技术标准
✅ 易于使用:开发体验好,文档丰富
4.3 两种开发模式
ASP.NET Core 支持两种主流开发模式:
| 模式 | 说明 | 适用场景 |
|---|---|---|
| Minimal API | 最小化 API,代码简洁 | 开发 API 接口、前后端分离项目 |
| MVC | Model-View-Controller | 开发传统 Web 页面 |
五、Minimal API 详解
5.1 什么是 Minimal API?
Minimal API 是 ASP.NET Core 6.0+ 引入的一种轻量级开发模式,它使用简洁的代码风格来构建 API,无需创建控制器和文件夹,只需在 Program.cs 中直接定义端点。
Minimal API 的特点
✅ 代码简洁 :几行代码即可创建一个 API
✅ 快速开发 :无需繁琐的文件结构
✅ 易于理解 :逻辑集中,便于快速阅读
✅ 适合小型项目 :适合快速原型开发
✅ 性能优秀:启动快,内存占用少
5.2 Minimal API 示例
5.2.1 创建 Minimal API 项目
使用命令行创建:
bash
# 创建 Minimal API 项目
dotnet new web -n MinimalApiDemo
# 进入项目目录
cd MinimalApiDemo
# 运行项目
dotnet run
5.2.2 编写 Minimal API
打开 Program.cs:
csharp
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
// Hello World 端点
app.MapGet("/", () => "Hello, Minimal API!");
// 获取所有图书
app.MapGet("/books", () =>
{
var books = new[]
{
new { Id = 1, Title = "C# 入门", Author = "张三", Price = 89.5m },
new { Id = 2, Title = "ASP.NET Core 实战", Author = "李四", Price = 99.0m }
};
return books;
});
// 根据 ID 获取图书
app.MapGet("/books/{id}", (int id) =>
{
var books = new[]
{
new { Id = 1, Title = "C# 入门", Author = "张三", Price = 89.5m },
new { Id = 2, Title = "ASP.NET Core 实战", Author = "李四", Price = 99.0m }
};
var book = books.FirstOrDefault(b => b.Id == id);
return book is null ? Results.NotFound() : Results.Ok(book);
});
// 添加图书 (POST)
app.MapPost("/books", (Book book) =>
{
// 这里可以添加到数据库
return Results.Created($"/books/{book.Id}", book);
});
// 更新图书 (PUT)
app.MapPut("/books/{id}", (int id, Book book) =>
{
// 这里可以更新数据库
return Results.NoContent();
});
// 删除图书 (DELETE)
app.MapDelete("/books/{id}", (int id) =>
{
// 这里可以删除数据库记录
return Results.NoContent();
});
app.Run();
// 图书模型
record Book(int Id, string Title, string Author, decimal Price);
5.3 Minimal API 的路由
csharp
// 固定路径
app.MapGet("/hello", () => "Hello!");
// 带参数的路径
app.MapGet("/hello/{name}", (string name) => $"Hello, {name}!");
// 多个参数
app.MapGet("/books/{category}/{id}", (string category, int id) =>
$"分类: {category}, ID: {id}");
// 查询参数
app.MapGet("/search", (string keyword, int page = 1) =>
$"搜索: {keyword}, 页码: {page}");
访问示例:
/hello→Hello!/hello/张三→Hello, 张三!/books/tech/1→分类: tech, ID: 1/search?keyword=C#&page=2→搜索: C#, 页码: 2
六、MVC 模式详解
6.1 什么是 MVC?
MVC(Model-View-Controller)是一种经典的软件设计模式,它将应用程序分为三个核心部分:
┌─────────────────────────────────────────────────────┐
│ MVC 架构 │
├─────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────┐│
│ │ 浏览器 │◄───────►│ View │◄───────│ Model││
│ │ │ HTML │ (视图) │ 数据 │ (模型)││
│ └──────────┘ └──────────┘ └──────┘│
│ ▲ ▲ ▲ │
│ │ │ │ │
│ │ 用户请求 │ 数据 │ │
│ └────────────────┴─────────────────────┘ │
│ │ │
│ ┌──────┴──────┐ │
│ │ Controller │ │
│ │ (控制器) │ │
│ └─────────────┘ │
└─────────────────────────────────────────────────────┘
MVC 三个组件
| 组件 | 作用 | 说明 |
|---|---|---|
| Model (模型) | 处理数据和业务逻辑 | 代表应用程序的数据和业务规则 |
| View (视图) | 显示界面 | 负责向用户展示数据(HTML 页面) |
| Controller (控制器) | 处理请求和响应 | 接收用户输入,调用模型,选择视图 |
MVC 的工作流程
用户请求 → Controller (控制器)
↓
Model (模型)
↓
View (视图)
↓
用户响应
6.2 MVC 的特点
✅ 职责分离 :关注点分离,代码结构清晰
✅ 易于维护 :各部分独立修改,互不影响
✅ 可测试性强 :便于进行单元测试
✅ 适合复杂应用 :适合大型、复杂的 Web 应用
✅ 团队协作友好:分工明确,前后端可并行开发
6.3 创建 MVC 项目
6.3.1 使用 Visual Studio 创建
- 打开 Visual Studio
- 点击 "创建新项目"
- 搜索并选择 "ASP.NET Core Web 应用 (Model-View-Controller)"
- 输入项目名称(如
MvcDemo) - 选择框架:.NET 8.0(或最新版本)
- 点击 "创建"
6.3.2 使用命令行创建
bash
# 创建 MVC 项目
dotnet new mvc -n MvcDemo
# 进入项目目录
cd MvcDemo
# 运行项目
dotnet run
6.4 MVC 项目结构
MvcDemo/
├── Controllers/ # 控制器(处理请求)
│ └── HomeController.cs
├── Models/ # 模型(数据)
│ └── Book.cs
├── Views/ # 视图(页面)
│ ├── Home/
│ │ └── Index.cshtml
│ └── Shared/
│ └── _Layout.cshtml
├── wwwroot/ # 静态文件(CSS、JS、图片)
├── Program.cs # 程序入口
├── appsettings.json # 配置文件
└── MvcDemo.csproj # 项目文件
6.5 MVC 示例:图书管理
6.5.1 创建模型 (Model)
csharp
// Models/Book.cs
public class Book
{
public int Id { get; set; }
public string Title { get; set; }
public string Author { get; set; }
public decimal Price { get; set; }
}
6.5.2 创建控制器 (Controller)
csharp
// Controllers/BooksController.cs
using Microsoft.AspNetCore.Mvc;
using MvcDemo.Models;
public class BooksController : Controller
{
private static List<Book> books = new List<Book>
{
new Book { Id = 1, Title = "C# 入门", Author = "张三", Price = 89.5m },
new Book { Id = 2, Title = "ASP.NET Core 实战", Author = "李四", Price = 99.0m }
};
// 显示图书列表
public IActionResult Index()
{
return View(books);
}
// 显示图书详情
public IActionResult Details(int id)
{
var book = books.FirstOrDefault(b => b.Id == id);
if (book == null)
{
return NotFound();
}
return View(book);
}
// 显示创建页面
[HttpGet]
public IActionResult Create()
{
return View();
}
// 处理创建请求
[HttpPost]
public IActionResult Create(Book book)
{
if (ModelState.IsValid)
{
book.Id = books.Max(b => b.Id) + 1;
books.Add(book);
return RedirectToAction("Index");
}
return View(book);
}
// 显示编辑页面
[HttpGet]
public IActionResult Edit(int id)
{
var book = books.FirstOrDefault(b => b.Id == id);
if (book == null)
{
return NotFound();
}
return View(book);
}
// 处理编辑请求
[HttpPost]
public IActionResult Edit(int id, Book book)
{
if (ModelState.IsValid)
{
var existingBook = books.FirstOrDefault(b => b.Id == id);
existingBook.Title = book.Title;
existingBook.Author = book.Author;
existingBook.Price = book.Price;
return RedirectToAction("Index");
}
return View(book);
}
// 删除图书
public IActionResult Delete(int id)
{
var book = books.FirstOrDefault(b => b.Id == id);
if (book == null)
{
return NotFound();
}
books.Remove(book);
return RedirectToAction("Index");
}
}
6.5.3 创建视图 (View)
Views/Books/Index.cshtml(图书列表):
html
@model IEnumerable<Book>
@{
ViewData["Title"] = "图书列表";
}
<h1>图书列表</h1>
<p>
<a asp-action="Create" class="btn btn-primary">添加新书</a>
</p>
<table class="table">
<thead>
<tr>
<th>ID</th>
<th>书名</th>
<th>作者</th>
<th>价格</th>
<th>操作</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.Id</td>
<td>@item.Title</td>
<td>@item.Author</td>
<td>@item.Price.ToString("C")</td>
<td>
<a asp-action="Details" asp-route-id="@item.Id">详情</a> |
<a asp-action="Edit" asp-route-id="@item.Id">编辑</a> |
<a asp-action="Delete" asp-route-id="@item.Id">删除</a>
</td>
</tr>
}
</tbody>
</table>
Views/Books/Create.cshtml(创建图书):
html
@model Book
@{
ViewData["Title"] = "添加图书";
}
<h1>添加图书</h1>
<form asp-action="Create" method="post">
<div class="form-group">
<label asp-for="Title">书名</label>
<input asp-for="Title" class="form-control" />
</div>
<div class="form-group">
<label asp-for="Author">作者</label>
<input asp-for="Author" class="form-control" />
</div>
<div class="form-group">
<label asp-for="Price">价格</label>
<input asp-for="Price" class="form-control" type="number" step="0.01" />
</div>
<button type="submit" class="btn btn-primary">保存</button>
<a asp-action="Index" class="btn btn-secondary">取消</a>
</form>
七、Minimal API vs MVC 深度对比
7.1 代码量对比
Minimal API 版本(5 行代码)
csharp
app.MapGet("/books", () => new[]
{
new { Id = 1, Title = "C# 入门", Author = "张三", Price = 89.5m }
});
MVC 版本(需要 3 个文件)
csharp
// Controller
public class BooksController : Controller
{
public IActionResult Index()
{
var books = new[] { new { Id = 1, Title = "C# 入门" } };
return View(books);
}
}
// Model
public class Book { public int Id { get; set; } public string Title { get; set; } }
// View
@model IEnumerable<Book>
@foreach (var book in Model) { <p>@book.Title</p> }
7.2 功能对比表
| 对比项 | Minimal API | MVC |
|---|---|---|
| 代码量 | 少,代码集中 | 多,文件分散 |
| 学习曲线 | 平缓,快速上手 | 较陡,需要理解 MVC |
| 开发速度 | 快,适合快速开发 | 慢,需要创建多个文件 |
| 可维护性 | 小型项目好,大型项目差 | 大型项目优秀 |
| 灵活性 | 高,自由度大 | 低,遵循固定模式 |
| 路由 | 简洁,直观 | 基于控制器和动作 |
| 视图 | 需要自己处理 HTML | 内置 Razor 视图引擎 |
| 适合项目 | API、微服务、小型项目 | 传统 Web 应用、大型项目 |
| 测试友好性 | 一般 | 优秀,便于单元测试 |
| 团队协作 | 一般 | 优秀,分工明确 |
| 扩展性 | 一般 | 优秀 |
7.3 适用场景
Minimal API 适合的场景
✅ 纯 API 开发
- 前后端分离的 API 项目
- 移动 App 的后端服务
- 微服务架构
✅ 快速原型开发
- 概念验证(POC)
- 小型工具和服务
- 快速迭代的内部工具
✅ 简单应用
- RESTful API
- Webhook 处理
- 简单的数据服务
✅ 性能敏感场景
- 高并发、低延迟需求
- 资源受限环境
MVC 适合的场景
✅ 传统 Web 应用
- 企业级管理系统
- 后台管理系统
- 内容管理系统(CMS)
✅ 复杂页面应用
- 需要复杂的服务端渲染
- 需要丰富的 HTML 交互
- SEO 友好的网站
✅ 大型项目
- 团队协作开发
- 需要长期维护的项目
- 需要严格架构规范
✅ 快速开发 Web 界面
- 不想学习前端框架(React、Vue)
- 需要快速搭建 Web 界面
7.4 如何选择?
选择 Minimal API,如果:
-
只开发 API,不涉及页面
- 移动 App 后端
- 前端分离项目的 API
-
项目规模小,开发周期短
- 小型工具
- 概念验证
- 个人项目
-
团队成员少,追求开发效率
- 1-2 人小团队
- 快速迭代需求
-
对性能要求高
- 高并发场景
- 微服务架构
选择 MVC,如果:
-
需要开发 Web 页面
- 传统网站
- 管理后台
- 内容管理系统
-
项目规模大,需要长期维护
- 企业级应用
- 大型系统
-
团队协作开发
- 多人团队
- 需要明确的分工
-
需要良好的代码结构
- 复杂业务逻辑
- 需要扩展和维护
7.5 混合使用
提示:在实际项目中,Minimal API 和 MVC 可以并存!ASP.NET Core 允许在同一项目中同时使用两种模式。
csharp
var builder = WebApplication.CreateBuilder(args);
// 添加 MVC 服务
builder.Services.AddControllers();
var app = builder.Build();
// 同时支持 Minimal API 和 MVC
app.MapGet("/api/hello", () => "Hello from Minimal API!"); // Minimal API
app.MapControllers(); // MVC 控制器
app.Run();
混合使用场景:
- 前端页面使用 MVC
- API 接口使用 Minimal API
- 老项目逐步迁移
八、创建第一个 ASP.NET Core 应用
5.1 安装开发工具
-
安装 Visual Studio 2022
- 下载地址:https://visualstudio.microsoft.com/
- 安装时选择 "ASP.NET 和 Web 开发" 工作负载
-
或安装 .NET SDK
- 下载地址:https://dotnet.microsoft.com/download
- 使用 VS Code 作为编辑器
5.2 创建项目(使用 Visual Studio)
- 打开 Visual Studio
- 点击 "创建新项目"
- 搜索并选择 "ASP.NET Core Web API"
- 输入项目名称(如
MyFirstWebApp) - 选择框架:.NET 8.0(或最新版本)
- 点击 "创建"
5.3 创建项目(使用命令行)
bash
# 创建新的 Web API 项目
dotnet new webapi -n MyFirstWebApp
# 进入项目目录
cd MyFirstWebApp
# 运行项目
dotnet run
5.4 项目结构
MyFirstWebApp/
├── Controllers/ # 控制器目录
│ └── WeatherForecastController.cs
├── Program.cs # 程序入口
├── appsettings.json # 配置文件
└── MyFirstWebApp.csproj # 项目文件
5.5 理解 Program.cs
csharp
var builder = WebApplication.CreateBuilder(args);
// 添加服务
builder.Services.AddControllers();
var app = builder.Build();
// 配置请求管道
app.MapControllers();
app.Run();
- builder:构建器,用于配置服务
- app:Web 应用实例
- AddControllers:添加控制器服务
- MapControllers:映射控制器路由
六、第一个 Web API
6.1 创建控制器
在 Controllers 文件夹中创建 HelloController.cs:
csharp
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
public class HelloController : ControllerBase
{
[HttpGet]
public IActionResult SayHello()
{
return Ok("Hello, ASP.NET Core!");
}
[HttpGet("{name}")]
public IActionResult Greet(string name)
{
return Ok($"你好, {name}!");
}
[HttpPost]
public IActionResult Create([FromBody] string message)
{
return Ok($"收到消息: {message}");
}
}
6.2 测试 API
运行项目后,浏览器会自动打开 Swagger 页面,可以通过 Swagger 界面测试 API。
或者直接在浏览器访问:
https://localhost:xxxx/api/hello→ 输出:Hello, ASP.NET Core!https://localhost:xxxx/api/hello/张三→ 输出:你好, 张三!
6.3 理解控制器特性
csharp
[ApiController] // 标记为 API 控制器
[Route("api/[controller]")] // 路由:api/控制器名
public class HelloController : ControllerBase
{
[HttpGet] // 响应 GET 请求
[HttpGet("{name}")] // 响应带参数的 GET 请求
[HttpPost] // 响应 POST 请求
}
七、完整示例:图书管理 API
7.1 创建数据模型
csharp
// Models/Book.cs
public class Book
{
public int Id { get; set; }
public string Title { get; set; }
public string Author { get; set; }
public decimal Price { get; set; }
}
7.2 创建控制器
csharp
// Controllers/BooksController.cs
using Microsoft.AspNetCore.Mvc;
using MyFirstWebApp.Models;
[ApiController]
[Route("api/[controller]")]
public class BooksController : ControllerBase
{
private static List<Book> books = new List<Book>
{
new Book { Id = 1, Title = "C# 入门", Author = "张三", Price = 89.5m },
new Book { Id = 2, Title = "ASP.NET Core 实战", Author = "李四", Price = 99.0m }
};
// GET: api/books
[HttpGet]
public ActionResult<IEnumerable<Book>> GetBooks()
{
return Ok(books);
}
// GET: api/books/1
[HttpGet("{id}")]
public ActionResult<Book> GetBook(int id)
{
var book = books.FirstOrDefault(b => b.Id == id);
if (book == null)
{
return NotFound($"未找到 ID 为 {id} 的图书");
}
return Ok(book);
}
// POST: api/books
[HttpPost]
public ActionResult<Book> AddBook([FromBody] Book book)
{
book.Id = books.Max(b => b.Id) + 1;
books.Add(book);
return CreatedAtAction(nameof(GetBook), new { id = book.Id }, book);
}
// PUT: api/books/1
[HttpPut("{id}")]
public IActionResult UpdateBook(int id, [FromBody] Book book)
{
var existingBook = books.FirstOrDefault(b => b.Id == id);
if (existingBook == null)
{
return NotFound();
}
existingBook.Title = book.Title;
existingBook.Author = book.Author;
existingBook.Price = book.Price;
return NoContent();
}
// DELETE: api/books/1
[HttpDelete("{id}")]
public IActionResult DeleteBook(int id)
{
var book = books.FirstOrDefault(b => b.Id == id);
if (book == null)
{
return NotFound();
}
books.Remove(book);
return NoContent();
}
}
7.3 测试 API
使用 Swagger 或 Postman 测试:
| 方法 | URL | 说明 |
|---|---|---|
| GET | /api/books |
获取所有图书 |
| GET | /api/books/1 |
获取 ID 为 1 的图书 |
| POST | /api/books |
添加新图书 |
| PUT | /api/books/1 |
更新 ID 为 1 的图书 |
| DELETE | /api/books/1 |
删除 ID 为 1 的图书 |
九、安装开发工具
9.1 安装 Visual Studio 2022
- 下载地址:https://visualstudio.microsoft.com/
- 安装时选择 "ASP.NET 和 Web 开发" 工作负载
- 包含 .NET SDK、C# 编译器、Web 开发工具
9.2 使用 .NET SDK + VS Code
- 下载 .NET SDK:https://dotnet.microsoft.com/download
- 安装 VS Code:https://code.visualstudio.com/
- 安装 C# 扩展
十、第一个 Web API 实践
10.1 使用 Visual Studio 创建 Web API 项目
- 打开 Visual Studio
- 点击 "创建新项目"
- 搜索并选择 "ASP.NET Core Web API"
- 输入项目名称(如
MyFirstWebApp) - 选择框架:.NET 8.0(或最新版本)
- 点击 "创建"
10.2 使用命令行创建 Web API 项目
bash
# 创建新的 Web API 项目(Minimal API)
dotnet new web -n MyFirstWebApp
# 创建新的 Web API 项目(Controller-based)
dotnet new webapi -n MyFirstWebApp
# 进入项目目录
cd MyFirstWebApp
# 运行项目
dotnet run
10.3 项目结构
MyFirstWebApp/
├── Controllers/ # 控制器目录(如果使用 MVC)
│ └── WeatherForecastController.cs
├── Program.cs # 程序入口(所有配置都在这里)
├── appsettings.json # 配置文件
└── MyFirstWebApp.csproj # 项目文件
10.4 理解 Program.cs
csharp
var builder = WebApplication.CreateBuilder(args);
// 添加服务
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// 配置请求管道
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.MapControllers();
app.Run();
关键概念:
- builder:构建器,用于配置服务和依赖注入
- app:Web 应用实例,用于配置中间件管道
- AddControllers:添加 MVC 控制器服务
- MapControllers:映射控制器路由
- Swagger:API 文档生成工具
10.5 第一个控制器示例(MVC 模式)
在 Controllers 文件夹中创建 HelloController.cs:
csharp
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
public class HelloController : ControllerBase
{
[HttpGet]
public IActionResult SayHello()
{
return Ok("Hello, ASP.NET Core!");
}
[HttpGet("{name}")]
public IActionResult Greet(string name)
{
return Ok($"你好, {name}!");
}
[HttpPost]
public IActionResult Create([FromBody] string message)
{
return Ok($"收到消息: {message}");
}
}
10.6 第一个 Minimal API 示例
在 Program.cs 中添加:
csharp
// Hello World 端点
app.MapGet("/hello", () => "Hello, Minimal API!");
// 带参数的端点
app.MapGet("/hello/{name}", (string name) =>
{
return Results.Ok($"你好, {name}!");
});
// POST 请求
app.MapPost("/hello", (string message) =>
{
return Results.Ok($"收到消息: {message}");
});
10.7 测试 API
运行项目后,浏览器会自动打开 Swagger 页面(http://localhost:xxxx/swagger),可以通过 Swagger 界面测试 API。
或者直接在浏览器访问:
/api/hello→Hello, ASP.NET Core!/api/hello/张三→你好, 张三!/hello→Hello, Minimal API!/hello/李四→你好, 李四!
10.8 理解控制器特性
csharp
[ApiController] // 标记为 API 控制器
[Route("api/[controller]")] // 路由:api/控制器名
public class HelloController : ControllerBase
{
[HttpGet] // 响应 GET 请求
[HttpGet("{name}")] // 响应带参数的 GET 请求
[HttpPost] // 响应 POST 请求
}
十一、本周小结
核心知识点
-
互联网基础
- 客户端与服务器
- IP 地址与域名
-
HTTP 协议
- 请求与响应
- 常见方法:GET、POST、PUT、DELETE
- 状态码:200、404、500
-
URL 结构
- 协议、域名、路径、参数
-
ASP.NET Core
- 跨平台 Web 开发框架
- 两种开发模式:Minimal API、MVC
-
Minimal API
- 轻量级 API 开发模式
- 代码简洁,快速开发
- 适合 API 和小型项目
-
MVC 模式
- Model-View-Controller 架构
- 职责分离,结构清晰
- 适合大型 Web 应用
-
Web API
- 控制器(Controller)
- 路由(Route)
- HTTP 方法特性
- Swagger 文档生成
实践成果
✅ 理解了互联网和 Web 应用的基本概念
✅ 掌握了 HTTP 协议和 URL 结构
✅ 学会了 Minimal API 的开发方式
✅ 掌握了 MVC 模式的使用方法
✅ 能够根据项目需求选择合适的开发模式
✅ 创建了第一个 ASP.NET Core Web API 项目
✅ 学会了使用 Swagger 测试 API