From 21656c5ad3b247e471b85f2b82bde27602b7e52d Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 28 May 2024 11:27:40 +0800 Subject: [PATCH 1/4] z --- ...36\345\210\240\346\224\271\346\237\245.md" | 131 ++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 "\345\274\240\346\240\207\346\230\237\345\256\211/20240527-\345\242\236\345\210\240\346\224\271\346\237\245.md" diff --git "a/\345\274\240\346\240\207\346\230\237\345\256\211/20240527-\345\242\236\345\210\240\346\224\271\346\237\245.md" "b/\345\274\240\346\240\207\346\230\237\345\256\211/20240527-\345\242\236\345\210\240\346\224\271\346\237\245.md" new file mode 100644 index 0000000..1068378 --- /dev/null +++ "b/\345\274\240\346\240\207\346\230\237\345\256\211/20240527-\345\242\236\345\210\240\346\224\271\346\237\245.md" @@ -0,0 +1,131 @@ +## 关于增删改查 + +在Program.cs中写: + +``` +namespace mm.Api; + +public static class Program +{ + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + public static IHostBuilder CreateHostBuilder(string[] args) + { + return Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(builder=> + { + builder.UseStartup(); + }); + } +} +``` + +在BlogsController.cs中写: + +``` +using Microsoft.AspNetCore.Mvc; + +namespace mm.Api; + +[ApiController] +[Route("[controller]")] +public class BlogsController:ControllerBase +{ + // /blogs/:id + [Route("{id?}")] + public IActionResult Details(int id) + { + return Ok(id); + } + + [HttpPost] + public ActionResult Post(BlogDto blogDto) + { + return blogDto; + } + + [HttpPut("{id}")] + public ActionResult Put(int id, BlogDto blogDto) + { + return new{id,blogDto}; + } + + public IActionResult Delete(int id) + { + return Ok(id); + } +} +``` + +在BlogDto.cs中写: + +``` +namespace mm.Api; + +public class BlogDto +{ + public string Title { get; set;}=null!; + public string Author{ get; set;}=null!; + public string? Flag{ get; set;} +} +``` + +在Startup.cs中写: + +``` +namespace mm.Api; + +public class Startup +{ + public void Configure(IApplicationBuilder app) + { + app.UseRouting(); + app.UseEndpoints(endpoints =>endpoints.MapControllers()); + } + public void ConfigureServices(IServiceCollection services) + { + services.AddControllers(); + } +} +``` + +在mm.Api.http中写: + +``` +@url = http://localhost:8080 + +### +GET {{url}}/blogs +Accept: application/json + +### +GET {{url}}/blogs/20 HTTP/1.1 + +### +GET {{url}}/users HTTP/1.1 + +### +POST {{url}}/blogs HTTP/1.1 +Content-Type: application/json + +{ + "title":"", + "author":"", + "flag":"" +} + +### +PUT {{url}}/blogs/9 HTTP/1.1 +Content-Type: application/json + +{ + "title":"", + "author":"", + "flag":"" +} + +### +DELETE {{url}}/blogs/99 HTTP/1.1 +``` +\ No newline at end of file \ No newline at end of file -- Gitee From 90ab38cf5218c8120c913413353fe4546d376bcd Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 28 May 2024 11:33:34 +0800 Subject: [PATCH 2/4] z --- ...267\257\347\224\261\345\222\214Serilog.md" | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 "\345\274\240\346\240\207\346\230\237\345\256\211/20240528-\350\267\257\347\224\261\345\222\214Serilog.md" diff --git "a/\345\274\240\346\240\207\346\230\237\345\256\211/20240528-\350\267\257\347\224\261\345\222\214Serilog.md" "b/\345\274\240\346\240\207\346\230\237\345\256\211/20240528-\350\267\257\347\224\261\345\222\214Serilog.md" new file mode 100644 index 0000000..b6eb2c9 --- /dev/null +++ "b/\345\274\240\346\240\207\346\230\237\345\256\211/20240528-\350\267\257\347\224\261\345\222\214Serilog.md" @@ -0,0 +1,56 @@ +### 路由 +- 在控制器上写两个特性 + + [ApiController] + + [Route("/api/...")] + +### 关于匹配到函数的处理 +- 入参:函数的参数,模型绑定 +- 返回值:返回的响应 + + 1.状态码 + + 2.带对象的状态码 + + 3.重定向 + + 4.内容{ + Code:1000, + data:[], + msg:'请求成功' + } +### 如果不符合restfull风格的路由的话,在action上单独写路由 +- [HttpGet("/api/...")] + +### action过滤器 +```js +public Tack OnResultExecutionAsync(ResultExecutingContext content,ResultExeationDelegate next){ + //判断返回结果是否是内容 + if(context.Result is ObjectRsult) + { + var ObjectRsult=(ObjectResult)Context.Result; + context.Result=new ApiResult({ + Code=1000, + msg="请求成功", + Data=ObjectResult.vaule + }); + }else{ + context.Result=new ObjectRsult(new ApiResult{ + Code=1001 + }); + await next(); + } +} +``` + +### .NET中的Serilog是什么 + +从名称上看,你可能会认为它只是关于“日志记录”——开发人员在程序执行期间记录的消息,以了解其流程。但是 Serilog 的功能远不止表面上看到的那么简单。它不仅通过“结构化日志记录”将日志记录提升到一个新的水平,而且还简化了日志事件,使其易于查询。 + +// 使用 Serilog +``` +Log.Logger = new LoggerConfiguration() + .WriteTo.Console() + .CreateLogger(); + +Log.Information("Hello, Serilog!"); +``` +// 创建结构化日志数据 +``` +Log.Information("Order {OrderId} created for {CustomerId}", orderId, customerId); +``` \ No newline at end of file -- Gitee From ae2d6af3047b74f0d75c174598841004ff0a2902 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=A0=87=E6=98=9F=E5=AE=89?= <11802724+zhang-biao-xingan@user.noreply.gitee.com> Date: Sun, 2 Jun 2024 13:05:31 +0000 Subject: [PATCH 3/4] =?UTF-8?q?add=20=E5=BC=A0=E6=A0=87=E6=98=9F=E5=AE=89/?= =?UTF-8?q?2024530-=E9=A1=B9=E7=9B=AE.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 张标星安 <11802724+zhang-biao-xingan@user.noreply.gitee.com> --- .../2024530-\351\241\271\347\233\256.md" | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 "\345\274\240\346\240\207\346\230\237\345\256\211/2024530-\351\241\271\347\233\256.md" diff --git "a/\345\274\240\346\240\207\346\230\237\345\256\211/2024530-\351\241\271\347\233\256.md" "b/\345\274\240\346\240\207\346\230\237\345\256\211/2024530-\351\241\271\347\233\256.md" new file mode 100644 index 0000000..e00aea5 --- /dev/null +++ "b/\345\274\240\346\240\207\346\230\237\345\256\211/2024530-\351\241\271\347\233\256.md" @@ -0,0 +1,39 @@ +# 一、项目设计 +## 一、主体结构 +1. Resultfull风格的WebApi +2. Asp.net core 8.0 +3. 采用传统控制器模式 + +## 二、模型设计(例如:图书管理系统) +### 1.作者表Authors +1. 姓名 AuthorName +2. 性别 Gender +3. 出生年月 Birthday +### 2.图书表Books +1. 书名BookName +2. 出版社Publiser +3. 作者AuthorId +4. 价格Price + +## 三、内存型数据库(自定义的一个集合类) +在应用程序中定义一个类,专门提供模拟数据 + +## 四、仓储系统(准备用来接入数据库的一套接口) +### 1.通用型仓储接口 +定义了通用的数据存取操作方法,例如增删改查 +### 2.个性化的仓储接口 +针对特定业务需求而定义的数据存取接口,通常继承自通用型仓储接口,通过扩展通用接口来实现特定业务需求的操作 + +## 五、利用主体结构,具体实现Resultfull风格的关于两个表的CRUD +### 1.作者表 +- 获取作者列表 get/api/authors +- 获取指定作者 get/api/authors/29 +- 新增作者信息 post/api/authors +- 修改作者信息 put/api/authors/29 +- 删除作者信息 delete/api/authors/29 +### 2.图书表-部署于作者表底下 +- 获取图书列表 get/api/authors/9/books +- 获取指定图书 get/api/authors/9/books/29 +- 新增图书信息 post/api/authors/9/books +- 修改图书信息 put/api/authors/9/books/29 +- 删除图书信息 delete/api/authors/9/books/29 \ No newline at end of file -- Gitee From 06d0b5c43b04a1d54ff771fa958f5c9954171501 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=A0=87=E6=98=9F=E5=AE=89?= <11802724+zhang-biao-xingan@user.noreply.gitee.com> Date: Sun, 2 Jun 2024 13:06:27 +0000 Subject: [PATCH 4/4] =?UTF-8?q?add=20=E5=BC=A0=E6=A0=87=E6=98=9F=E5=AE=89/?= =?UTF-8?q?2024531-=E5=9B=BE=E4=B9=A6.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 张标星安 <11802724+zhang-biao-xingan@user.noreply.gitee.com> --- .../2024531-\345\233\276\344\271\246.md" | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 "\345\274\240\346\240\207\346\230\237\345\256\211/2024531-\345\233\276\344\271\246.md" diff --git "a/\345\274\240\346\240\207\346\230\237\345\256\211/2024531-\345\233\276\344\271\246.md" "b/\345\274\240\346\240\207\346\230\237\345\256\211/2024531-\345\233\276\344\271\246.md" new file mode 100644 index 0000000..655e65d --- /dev/null +++ "b/\345\274\240\346\240\207\346\230\237\345\256\211/2024531-\345\233\276\344\271\246.md" @@ -0,0 +1,101 @@ +创建项目 dotnet new webapi -o/-n 项目名称 cd 项目名称 +启动项目 dotnet run/dotnet watch --project .\项目名称\ +打开Program.cs + +// 定义一个名为TodoA的命名空间 +namespace TodoA +{ + // 定义一个公共静态类,用于应用程序的入口点 + public static class Program + { + // 主函数,应用程序的入口点,接收命令行参数 + public static void Main(string[] args) + { + // 创建一个HostBuilder实例,用于配置和构建应用程序 + IHostBuilder hostBuilder = CreateHostBuilder(args); + + // 使用Build方法构建和启动应用程序 + hostBuilder.Build().Run(); + } + + // 创建HostBuilder的静态方法,用于配置WebHost的默认设置 + public static IHostBuilder CreateHostBuilder(string[] args) + { + // 使用Host类的CreateDefaultBuilder方法创建一个新的Builder实例,传入命令行参数 + return Host.CreateDefaultBuilder(args); + + // 添加WebHost的默认配置,即使用Startup类作为应用程序的启动点 + .ConfigureWebHostDefaults(builder => + { + builder.UseStartup(); + }); + } + } +} +在同层创建一个Startup.cs文件,写入以下代码 + +// 定义一个名为TodoA的命名空间 +namespace TodoA + // 定义一个公共类,用于应用程序的启动和配置 + public class Startup + { + // 配置服务容器的方法,用于注册依赖注入的服务 + public void ConfigureServices(IServiceCollection services) + { + // 注册控制器服务 + services.AddControllers(); + } + + // 配置中间件管道的方法,用于设置HTTP请求处理的流程 + public void Configure(IApplicationBuilder app) + { + // 使用Routing中间件,用于路由匹配 + app.UseRouting(); + + // 使用Endpoints中间件,用于管理终结点 + app.UseEndpoints(endPoints => + { + // 将控制器终结点映射到应用程序中 + endPoints.MapControllers(); + }); + } + } +在Controller文件夹中添加BooksController.cs文件,写图书的信息,实现crud + +using Microsoft.AspNetCore.Mvc; // 引入ASP.NET Core MVC的命名空间,用于控制器和动作方法的创建 + +namespace TodoA; // 定义命名空间,用于组织代码 + +[ApiController] // 标记该类为API控制器,启用一些API控制器的特性 +[Route("/api/[controller]")] // 定义控制器的路由模板,[controller]将替换为控制器名称 + +public class BooksController : ControllerBase // 定义一个公共类BooksController,继承自ControllerBase +{ + // 查询操作,通过HTTP GET请求获取特定ID的书籍信息 + [HttpGet("{id}")] // 使用HTTP GET方法,并定义路径参数{id} + public IActionResult Get(int id, BooksDto booksDto) // 定义Get方法,接收一个整数id和一个BooksDto对象 + { + return Ok(new { id, booksDto }); // 返回包含id和booksDto的Ok结果 + } + + // 增加操作,通过HTTP POST请求添加新的书籍信息 + [HttpPost] // 使用HTTP POST方法 + public IActionResult Post(BooksDto booksDto) // 定义Post方法,接收一个BooksDto对象 + { + return Ok(new { booksDto }); // 返回包含booksDto的Ok结果 + } + + // 修改操作,通过HTTP PUT请求更新特定ID的书籍信息 + [HttpPut("{id}")] // 使用HTTP PUT方法,并定义路径参数{id} + public IActionResult Put(int id, BooksDto booksDto) // 定义Put方法,接收一个整数id和一个BooksDto对象 + { + return Ok(new { id, booksDto }); // 返回包含id和booksDto的Ok结果 + } + + // 删除操作,通过HTTP DELETE请求删除特定ID的书籍信息 + [HttpDelete("{id}")] // 使用HTTP DELETE方法,并定义路径参数{id} + public IActionResult Delete(int id, BooksDto booksDto) // 定义Delete方法,接收一个整数id和一个BooksDto对象 + { + return Ok(); // 返回一个简单的Ok结果,表示操作成功 + } +}; \ No newline at end of file -- Gitee