From 17e25bfaea116765670b06dfd8a455b36e4c97b2 Mon Sep 17 00:00:00 2001 From: oo <1483839097@qq.com> Date: Sun, 24 Nov 2024 20:49:24 +0800 Subject: [PATCH] mm --- ...67\346\261\202\345\244\204\347\220\206.md" | 104 ++++++++++ ...57\345\212\250\351\205\215\347\275\256.md" | 187 ++++++++++++++++++ 2 files changed, 291 insertions(+) create mode 100644 "\346\254\247\345\272\255\347\200\232/\347\254\224\350\256\260/20241118 -POST\350\257\267\346\261\202\345\244\204\347\220\206.md" create mode 100644 "\346\254\247\345\272\255\347\200\232/\347\254\224\350\256\260/20241120 -Core\350\267\257\347\224\261\346\250\241\345\274\217\344\270\216\345\220\257\345\212\250\351\205\215\347\275\256.md" diff --git "a/\346\254\247\345\272\255\347\200\232/\347\254\224\350\256\260/20241118 -POST\350\257\267\346\261\202\345\244\204\347\220\206.md" "b/\346\254\247\345\272\255\347\200\232/\347\254\224\350\256\260/20241118 -POST\350\257\267\346\261\202\345\244\204\347\220\206.md" new file mode 100644 index 0000000..e965561 --- /dev/null +++ "b/\346\254\247\345\272\255\347\200\232/\347\254\224\350\256\260/20241118 -POST\350\257\267\346\261\202\345\244\204\347\220\206.md" @@ -0,0 +1,104 @@ +## POST 请求的处理及示例 + +### `POST` 请求的基本概念 + +`POST` 请求用于向服务器发送数据,通常用来提交表单信息或者发送 JSON 数据。与 `GET` 请求不同,`POST` 请求的数据不会暴露在 URL 中,而是通过请求体发送。 + +### 示例:接收并显示昵称 + +以下是一个简单的 ASP.NET Core 控制器示例,它接收客户端通过 `POST` 请求发送的 JSON 数据,获取其中的昵称并在网页上显示。 + +### POST 请求头 + +##### 模拟POST请求 + +发送的 `POST` 请求 + +请求体: + +```json +{ + "nickname": "测试名字" +} +``` + +- **请求头**:`Content-Type: application/json` 表示请求体中的数据是 JSON 格式。 +- **请求体**:包含了需要传输的数据,这里是 `nickname` 字段和它的值 `"测试名字"`。 + +##### 返回结果 + +```http +HTTP/1.1 200 OK +Connection: close +Content-Type: text/html; charset=utf-8 +Date: Mon, 18 Nov 2024 14:22:21 GMT +Server: Kestrel +Transfer-Encoding: chunked + +

接收到的昵称是:测试名字

+``` + +### 控制器部分 + +#### 模型类 (`NicknameModel`) + +```csharp +public class NicknameModel +{ + public required string Nickname { get; set; } +} +``` + +- **作用**:模型类定义了一个 `Nickname` 字段,用于接收客户端发送的昵称。通过 `required` 关键字,确保客户端必须提供 `nickname` 数据,否则会出现错误。 + +#### 控制器类 (`PostController`) + +```csharp +public class PostController : Controller +{ + [HttpPost] + public IActionResult Index([FromBody] NicknameModel model) + { + // 从请求中获取昵称数据 + string nickname = model.Nickname; + + // 将昵称存储到 ViewData 中,以便在视图中使用 + ViewData["Nickname"] = nickname; + + // 返回视图 + return View(); + } +} +``` + +- **作用**:控制器接收 `POST` 请求中的数据,并将昵称存储到 `ViewData` 中,最后返回一个视图来显示该昵称。 + + `[FromBody]` 表示框架从请求体中获取数据,并将其自动转换为方法参数所需的类型。在此示例中,它会将请求体中的 JSON 数据转换为 `NicknameModel` 对象。 + +#### 视图部分 (`Index.cshtml`) + +```html +@using Microsoft.AspNetCore.Mvc.ViewFeatures +@{ + ViewData["Title"] = "昵称显示"; +} +

接收到的昵称是:@Html.Raw(ViewData["Nickname"])

+@* @Html.Raw() 会告诉 Razor 引擎将 ViewData["Nickname"] 渲染为原始 HTML 内容,不进行转义。 *@ +``` + +- **作用**:视图部分用来显示传递过来的昵称。通过 `@ViewData["Nickname"]`,在页面中显示控制器传递过来的昵称数据。 + + 且通过 `@Html.Raw(ViewData["Nickname"])`,在页面中显示控制器传递过来的昵称数据。`@Html.Raw()` 会防止 HTML 转义,直接渲染原始内容。 + +### 代码流向 + +1. **客户端**:通过 `POST` 请求发送 JSON 数据到服务器。 +2. **控制器**:接收并解析 `POST` 请求中的数据。 +3. **视图**:展示控制器传递的数据。 + +### 总结 + +- **`POST` 请求**:用于向服务器提交数据。常用于表单提交或 JSON 数据交互。 +- **模型类**:用于接收客户端发送的 JSON 数据。 +- **控制器类**:处理 `POST` 请求,解析数据并传递给视图。 +- **视图部分**:显示控制器传递的数据,最终在网页上展现给用户。 \ No newline at end of file diff --git "a/\346\254\247\345\272\255\347\200\232/\347\254\224\350\256\260/20241120 -Core\350\267\257\347\224\261\346\250\241\345\274\217\344\270\216\345\220\257\345\212\250\351\205\215\347\275\256.md" "b/\346\254\247\345\272\255\347\200\232/\347\254\224\350\256\260/20241120 -Core\350\267\257\347\224\261\346\250\241\345\274\217\344\270\216\345\220\257\345\212\250\351\205\215\347\275\256.md" new file mode 100644 index 0000000..0418898 --- /dev/null +++ "b/\346\254\247\345\272\255\347\200\232/\347\254\224\350\256\260/20241120 -Core\350\267\257\347\224\261\346\250\241\345\274\217\344\270\216\345\220\257\345\212\250\351\205\215\347\275\256.md" @@ -0,0 +1,187 @@ +## ASP.NET Core 路由模式与启动配置 + +### 路由模式解析 + +路由模式定义了 URL 的结构以及如何将其映射到控制器的操作方法中。ASP.NET Core 默认的路由模式为: + +```csharp +"{controller=Home}/{action=Index}/{id?}" +``` + +### 路由模式的组成部分 + +- **`{controller=Home}`** + 指定控制器的占位符。如果 URL 中未明确指定控制器,则使用 `HomeController` 作为默认值。 + +- **`{action=Index}`** + 指定操作方法的占位符。如果 URL 中未明确指定操作方法,则使用 `Index` 作为默认值。 + +- **`{id?}`** + 表示一个可选的参数,占位符为 `id`,可以传递到控制器方法中。 + +--- + +### 控制器中使用路由参数 + +路由参数与控制器方法中的参数名对应,以下是一个简单的示例: + +```csharp +using Microsoft.AspNetCore.Mvc; + +namespace MyFirstMvc.Controllers +{ + public class HomeController : Controller + { + [HttpGet] + public IActionResult Index(int id) + { + var model = GetModelById(id); + return View(model); + } + + private MyModel GetModelById(int id) + { + return new MyModel { Id = id, Name = "示例" }; + } + } + + public class MyModel + { + public int Id { get; set; } + public string Name { get; set; } + } +} +``` + +### URL 请求示例 +当用户访问 `http://localhost:5000/Home/Index/5` 时: +1. **控制器**: 匹配到 `HomeController`。 +2. **操作方法**: 匹配到 `Index` 方法。 +3. **参数**: 路由参数 `id` 的值为 `5`,并传递到 `Index` 方法中。 + +--- + +### 参数名的匹配规则 + +在路由模式中,`{id?}` 定义了一个可选参数,其名称为 `id`。控制器方法的参数名必须与此占位符一致,例如: +- 如果路由模式为 `{productId?}`,则方法参数名应为 `productId`。 + +- 参数名不匹配时,将导致请求无法正确解析参数。 + +--- + +### 总结 + +路由模式 `"{controller=Home}/{action=Index}/{id?}"` : +- 允许通过 URL 直接访问控制器和方法。 +- 参数名需要与占位符一致,避免请求解析问题。 + +--- + +## ASP.NET Core `launchSettings.json` 配置详解 + +`launchSettings.json` 文件位于 ASP.NET Core 项目的 `Properties` 文件夹中,用于配置开发环境下的启动选项。以下是你的 `launchSettings.json` 文件解析: + +```json +{ + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5254", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7023;http://localhost:5254", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} +``` + +--- + +### 配置字段解析 + +#### **`profiles`** +每个配置文件(如 `http` 和 `https`)对应一个启动选项,可用于指定不同的启动模式。 + +#### **`commandName`** +- 指定启动方式。 +- `"Project"`:表示以当前项目为启动对象,常用于开发和调试。 +- `"IISExpress"`:表示使用 IIS Express 启动。 + +--- + +#### **`dotnetRunMessages`** +- 控制是否在控制台显示 `dotnet run` 的详细信息。 +- `true`:启用(推荐用于调试)。 +- `false`:关闭。 + +--- + +#### **`launchBrowser`** +- 是否自动打开浏览器访问启动 URL。 +- `true`:自动打开。 +- `false`:不打开。 + +--- + +#### **`applicationUrl`** +- 定义应用程序启动时绑定的 URL 地址。 +- 可配置多个地址,用分号分隔。 +- 示例: + - `"http://localhost:5254"`:通过 HTTP 协议访问。 + - `"https://localhost:7023;http://localhost:5254"`:支持 HTTPS 和 HTTP。 + +--- + +#### **`environmentVariables`** +- 设置运行时的环境变量。 +- 常用环境变量: + - `"ASPNETCORE_ENVIRONMENT"`:指定环境类型。 + - `"Development"`:开发环境,通常启用详细错误信息和调试功能。 + - `"Production"`:生产环境,启用优化和更高的安全性。 + +--- + +### 配置解读 + +#### **HTTP 配置** +- 使用 HTTP 协议启动。 +- 默认地址为 `http://localhost:5254`。 +- 启动时自动打开浏览器。 +- 运行环境为 `Development`。 + +#### **HTTPS 配置** +- 支持 HTTPS 和 HTTP。 +- 默认地址为: + - `https://localhost:7023` + - `http://localhost:5254` +- 启动时自动打开浏览器。 +- 运行环境为 `Development`。 + +--- + +### 使用场景 +- **调试与开发**:快速配置和启动调试环境。 +- **环境区分**:通过 `ASPNETCORE_ENVIRONMENT` 区分开发、测试和生产环境。 +- **本地测试**:设置 URL 和端口号,避免冲突或重复。 + +--- + +### 总结 + +`launchSettings.json` 提供了灵活的启动选项配置,快速启动和调试 ASP.NET Core 应用程序: + +1. 使用多个协议(HTTP 和 HTTPS)。 +2. 设置开发环境变量。 +3. 自动打开浏览器提高开发效率。 \ No newline at end of file -- Gitee