diff --git "a/\351\231\210\345\256\227\344\271\211/2024-05-27-\350\267\257\347\224\261\345\256\232\344\271\211.md" "b/\351\231\210\345\256\227\344\271\211/2024-05-27-\350\267\257\347\224\261\345\256\232\344\271\211.md" new file mode 100644 index 0000000000000000000000000000000000000000..d366e9a35d9ceedb1da885e6819f974fe2de2ef6 --- /dev/null +++ "b/\351\231\210\345\256\227\344\271\211/2024-05-27-\350\267\257\347\224\261\345\256\232\344\271\211.md" @@ -0,0 +1,62 @@ +### 路由:通过指定路径访问某一个类型而访问到指定的函数。 +``` +[ApiController].[Route("/api/..")] +``` + +### 关于匹配到函数的处理: + 1. 入参:函数的参数,模型绑定 +2. 出参:返回的响应,1.状态码 2.带对象的状态码 3.重定向 4.内容 + + +``` +Dto:BlogDto.cs + +namespace Admin2024.Api; + +public class BlogDto{ + public string Title {get;set;}=null!; + public string Author {get;set;}=null!; + public string? Flag {get;set;} + +} +``` + + +``` +BlogsController.cs: +using Microsoft.AspNetCore.Mvc; + +namespace Admin2024.Api; + +[ApiController] +[Route("/api/[controller]")] + +public class BlogsController:ControllerBase{ +//创建 + public IActionResult Index(){ + return Ok("你好,世界"); + } + + [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}; + } +//删除 + [HttpDelete] + public IActionResult Delete(int id){ + return Ok(id); + } + + +} +``` \ No newline at end of file diff --git "a/\351\231\210\345\256\227\344\271\211/2024-05-28-Filter\350\277\207\346\273\244\345\231\250.md" "b/\351\231\210\345\256\227\344\271\211/2024-05-28-Filter\350\277\207\346\273\244\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..655aea4debfb8db3de5abd262797d9e3ad7ba5ea --- /dev/null +++ "b/\351\231\210\345\256\227\344\271\211/2024-05-28-Filter\350\277\207\346\273\244\345\231\250.md" @@ -0,0 +1,51 @@ +## 过滤器 + +### Filter + +``` + +在默认的WebApi中,框架提供了三种Filter,他们的功能和运行条件如下表所示: + +Filter 类型 实现的接口 描述 +Authorization IAuthorizationFilter 最先运行的Filter,被用作请求权限校验 +Action IActionFilter 在Action运行的前、后运行 +Exception IExceptionFilter 当异常发生的时候运行 +``` + +``` +建Filter ApiResultFilter.cs: + +namespace Admin2024.Api; + +public class ApiResultFilter:IAsyncResultFilter{ + public Task OnResultExecutionAsync(ResultExecutingContent content,ResultExectionDeletegate next){ + //判断返回结果是否是内容,如果是,我们就给content.Result赋一个新的实例对象 + if(content.Result is objectResult){ + var objectResult=(objectResult)content.Result; + content.Result=new objectResult(new ApiResult{ + Code=1000, + Msg="请求成功", + Data=objectResult.Value + }) + }else{ + content.Result=new objectResult(new ApiResult{ + Code=1001 + }) + await next(); + } + } +} +``` + +``` +Dto ApiResult.cs + +namespace Admin2024.Api; + +public class ApiResult{ + public int Code{get;set;} + public string? Msg{get;set;} + public object? Data{get;set;} + +} +``` diff --git "a/\351\231\210\345\256\227\344\271\211/2024-05-30-\345\206\205\345\255\230\346\225\260\346\215\256\345\272\223.md" "b/\351\231\210\345\256\227\344\271\211/2024-05-30-\345\206\205\345\255\230\346\225\260\346\215\256\345\272\223.md" new file mode 100644 index 0000000000000000000000000000000000000000..f81608ba27d15e0627f7fb537f6cd89fd01f6424 --- /dev/null +++ "b/\351\231\210\345\256\227\344\271\211/2024-05-30-\345\206\205\345\255\230\346\225\260\346\215\256\345\272\223.md" @@ -0,0 +1,28 @@ +## 内存型数据库 + +- 创建一个 Db 对象 + +```csharp + public static BookDtoreDb Instance{get;set;}=new BookStoreDb(); + public Icollection<实例对象1> 名1 {get;set;}=new List<实例对象1>(); + public Icollection<实例对象2> 名2 {get;set;}=new List<实例对象2>(); + //初始化数据 + public BookStoreDb() + { + 名1.Add(new 实例名{ + 字段1=值1, + 字段2=值2 + }) + } +``` + +### 集合的操作 + +> 较多使用:ICollection、IList、IComparer + +### 各类文件夹的代指 + +- `Db`指的是内存型数据库,自己创建的数据库 +- `Domain`指的是实体类对象,用来放字段 +- `interfaces`指的是接口类对象(`I`实例名`Repository`结尾) +- `Services`是接口的实现类(实例名`Repository`结尾) diff --git "a/\351\231\210\345\256\227\344\271\211/2024-05-31-\351\241\271\347\233\256\350\267\257\347\224\261.md" "b/\351\231\210\345\256\227\344\271\211/2024-05-31-\351\241\271\347\233\256\350\267\257\347\224\261.md" new file mode 100644 index 0000000000000000000000000000000000000000..2e85d5d6df1225609d168095e11438f9aa00fa5c --- /dev/null +++ "b/\351\231\210\345\256\227\344\271\211/2024-05-31-\351\241\271\347\233\256\350\267\257\347\224\261.md" @@ -0,0 +1,57 @@ +## 接口 + +- I 实例名 Repository + + ```csharp + //通过Id获取所有作者的实现 + 实例对象? GetAuthorById(Guid guid); + + //获取所有作者的方法 + //函数三要素(函数名,形参,返回值) + ICollection<实例对象> GetAllAuthors(); + + ``` + +- 实例名 Repository + ```csharp + public class 实例名Repository:I实例名Repository + { + public ICollection<实例名> GetAllAuthors() + { + //从持久化数据库中获取 + return 名Db.Instance.实例名.ToList(); + //return [.. 名Db.Instance.实例名]; + } + public 实例名? GetAuthorById(Guid guid) + { + return 名Db.Instance.实例名.SingleOrDefault(item=>item.Id==guid); + } + } + ``` +- 控制器中 + ```csharp + private readonly I实例名Repository _实例名Repository; + public 实例名Controller(I实例名Repository 实例名Repository) + { + _实例名Repository=实例名Repository; + } + //获取get的函数中 + [HttpGet("{id?}")] + public IActionResult Get(int id) + { + if(id.ToString==""){ + return Ok(_实例名Repository.GetAllAuthors()); + }else{ + return Ok(_实例名Repository.GetAuthorById(id)); + } + } + ``` +- Startup + ```csharp + public void ConfigureServices(IServiceCollection services) + { + services.AddControllers(); + //新加 + services.AddScoped(); + } + ```