互联网与 Web 应用简介

专栏导航

← 上一篇:正则表达式入门 - 文本匹配利器

← 第一篇:编程世界初探

专栏目录

互联网与 Web 应用简介

  • 专栏导航
    • [一、互联网与 Web 应用](#一、互联网与 Web 应用)
      • [1.1 什么是 Web 应用?](#1.1 什么是 Web 应用?)
        • [Web 应用 vs 桌面应用](#Web 应用 vs 桌面应用)
      • [1.2 互联网基础](#1.2 互联网基础)
    • [二、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 简介)
      • [4.1 什么是 ASP.NET Core?](#4.1 什么是 ASP.NET Core?)
      • [4.2 ASP.NET Core 的优势](#4.2 ASP.NET Core 的优势)
      • [4.3 两种开发模式](#4.3 两种开发模式)
    • [五、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 APIASP.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}");

访问示例:

  • /helloHello!
  • /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 创建
  1. 打开 Visual Studio
  2. 点击 "创建新项目"
  3. 搜索并选择 "ASP.NET Core Web 应用 (Model-View-Controller)"
  4. 输入项目名称(如 MvcDemo
  5. 选择框架:.NET 8.0(或最新版本)
  6. 点击 "创建"
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,如果:
  1. 只开发 API,不涉及页面

    • 移动 App 后端
    • 前端分离项目的 API
  2. 项目规模小,开发周期短

    • 小型工具
    • 概念验证
    • 个人项目
  3. 团队成员少,追求开发效率

    • 1-2 人小团队
    • 快速迭代需求
  4. 对性能要求高

    • 高并发场景
    • 微服务架构
选择 MVC,如果:
  1. 需要开发 Web 页面

    • 传统网站
    • 管理后台
    • 内容管理系统
  2. 项目规模大,需要长期维护

    • 企业级应用
    • 大型系统
  3. 团队协作开发

    • 多人团队
    • 需要明确的分工
  4. 需要良好的代码结构

    • 复杂业务逻辑
    • 需要扩展和维护

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 安装开发工具

  1. 安装 Visual Studio 2022

  2. 或安装 .NET SDK

5.2 创建项目(使用 Visual Studio)

  1. 打开 Visual Studio
  2. 点击 "创建新项目"
  3. 搜索并选择 "ASP.NET Core Web API"
  4. 输入项目名称(如 MyFirstWebApp
  5. 选择框架:.NET 8.0(或最新版本)
  6. 点击 "创建"

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

  1. 下载地址:https://visualstudio.microsoft.com/
  2. 安装时选择 "ASP.NET 和 Web 开发" 工作负载
  3. 包含 .NET SDK、C# 编译器、Web 开发工具

9.2 使用 .NET SDK + VS Code

  1. 下载 .NET SDK:https://dotnet.microsoft.com/download
  2. 安装 VS Code:https://code.visualstudio.com/
  3. 安装 C# 扩展

十、第一个 Web API 实践

10.1 使用 Visual Studio 创建 Web API 项目

  1. 打开 Visual Studio
  2. 点击 "创建新项目"
  3. 搜索并选择 "ASP.NET Core Web API"
  4. 输入项目名称(如 MyFirstWebApp
  5. 选择框架:.NET 8.0(或最新版本)
  6. 点击 "创建"

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/helloHello, ASP.NET Core!
  • /api/hello/张三你好, 张三!
  • /helloHello, Minimal API!
  • /hello/李四你好, 李四!

10.8 理解控制器特性

csharp 复制代码
[ApiController]          // 标记为 API 控制器
[Route("api/[controller]")] // 路由:api/控制器名
public class HelloController : ControllerBase
{
    [HttpGet]            // 响应 GET 请求
    [HttpGet("{name}")]  // 响应带参数的 GET 请求
    [HttpPost]           // 响应 POST 请求
}

十一、本周小结

核心知识点

  1. 互联网基础

    • 客户端与服务器
    • IP 地址与域名
  2. HTTP 协议

    • 请求与响应
    • 常见方法:GET、POST、PUT、DELETE
    • 状态码:200、404、500
  3. URL 结构

    • 协议、域名、路径、参数
  4. ASP.NET Core

    • 跨平台 Web 开发框架
    • 两种开发模式:Minimal API、MVC
  5. Minimal API

    • 轻量级 API 开发模式
    • 代码简洁,快速开发
    • 适合 API 和小型项目
  6. MVC 模式

    • Model-View-Controller 架构
    • 职责分离,结构清晰
    • 适合大型 Web 应用
  7. Web API

    • 控制器(Controller)
    • 路由(Route)
    • HTTP 方法特性
    • Swagger 文档生成

实践成果

✅ 理解了互联网和 Web 应用的基本概念

✅ 掌握了 HTTP 协议和 URL 结构

✅ 学会了 Minimal API 的开发方式

✅ 掌握了 MVC 模式的使用方法

✅ 能够根据项目需求选择合适的开发模式

✅ 创建了第一个 ASP.NET Core Web API 项目

✅ 学会了使用 Swagger 测试 API

相关推荐
用户2986985301412 小时前
C# Word自动化:轻松插入特殊符号,告别手动烦恼!
后端·c#·.net
步步为营DotNet13 小时前
深入剖析.NET中Span:零拷贝内存操作的基石
服务器·php·.net
观无15 小时前
WPF+OpenCV 实现精准像素距离测量工具(.NET 4.6.1)
人工智能·opencv·.net
专注VB编程开发20年1 天前
c#.NET异步同小,ASYNC,AWAIT,PushFrame ,DOEVENTS
开发语言·.net
步步为营DotNet2 天前
深度解读.NET中的DbContext ChangeTracker:实体状态管理与性能优化
oracle·性能优化·.net
全栈小52 天前
【C#】合理使用DeepSeek相关AI应用为我们提供强有力的开发工具,在.net core 6.0框架下使用JsonNode动态解析json字符串,如何正确使用单问号和双问号做好空值处理
人工智能·c#·json·.netcore·deepseek
A_nanda2 天前
C#调用Quartz.NET的完整实现。
c#·.net·quartz
1314lay_10072 天前
Vue3 + Element Plus项目和C# .Net 7.0 Core后端API项目发布部署到服务器
服务器·前端·javascript·vue.js·elementui·c#·.net