From fd45f565e273eada3fe71ce52c5b509964e70aeb Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 2 Jun 2024 22:42:01 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...17\345\222\214\350\267\257\347\224\261.md" | 52 ++++++++++++ ...50\345\222\214\346\227\245\345\277\227.md" | 82 +++++++++++++++++++ ...13\346\225\260\346\215\256\345\272\223.md" | 26 ++++++ .../20240531-\346\216\245\345\217\243.md" | 54 ++++++++++++ 4 files changed, 214 insertions(+) create mode 100644 "\351\242\234\346\234\235\345\213\207/20240527-\347\220\206\350\247\243MVC\346\250\241\345\274\217\345\222\214\350\267\257\347\224\261.md" create mode 100644 "\351\242\234\346\234\235\345\213\207/20240528-\350\277\207\346\273\244\345\231\250\345\222\214\346\227\245\345\277\227.md" create mode 100644 "\351\242\234\346\234\235\345\213\207/20240530-\345\206\205\345\255\230\345\236\213\346\225\260\346\215\256\345\272\223.md" create mode 100644 "\351\242\234\346\234\235\345\213\207/20240531-\346\216\245\345\217\243.md" diff --git "a/\351\242\234\346\234\235\345\213\207/20240527-\347\220\206\350\247\243MVC\346\250\241\345\274\217\345\222\214\350\267\257\347\224\261.md" "b/\351\242\234\346\234\235\345\213\207/20240527-\347\220\206\350\247\243MVC\346\250\241\345\274\217\345\222\214\350\267\257\347\224\261.md" new file mode 100644 index 0000000..a24e928 --- /dev/null +++ "b/\351\242\234\346\234\235\345\213\207/20240527-\347\220\206\350\247\243MVC\346\250\241\345\274\217\345\222\214\350\267\257\347\224\261.md" @@ -0,0 +1,52 @@ +## 理解MVC模式 + +1.概念: + +MVC是模型(Model)、视图(View)、控制器(Controller)的缩写,它是Web应用程序中一种常用的架构模式。 + +## 路由 + +对于Web应用程序,路由是一个非常重要且基本的功能,它的主要功能是根据预先配置的路由信息对客户端传来的请求进行路由映射,映射完成后,再将请求传给对应的路由处理器信息。 + +具体来说,在ASP.NET Core MVC 中,路由负责从请求的URL中获取信息,并根据这些信息来定位或映射到对应的Controller与Action。 + +在开发Web API应用程序时,使用的HTTP特性 + +|HTTP特性|HTTP方法|URL示例| +| --- | --- | --- | +|[HttpGet] |Get |api/blogs(获取列表) api/blogs/1(获取指定ID)| +|[HttpPost]|POST|api/blogs| +|[HttpPut] |PUT|api/blogs/1| +|[HttpPatch]|PATCH|api/blogs/1| +|[HttpDelete]|Delete|api/blogs/1| + +由于每一个特性对应一个HTTP方法,因此如果要获取一个资源,可以这样使用: + +``` +[Router("api/[controller]")] +public class BlogsController :Controller +{ +[HttpGet("{id}")] +public IActionResult Get(string id) +{ + ... +} + +} + +``` + +## 模型绑定 +使用如下特性能够为Action的参数显示指定不同的绑定资源: + +- [FromHeader]特性:从HTTP请求的Header中获取参数的值。 +- [FromQuery]特性:从查询字符串中获取参数的值。 +- [FromService]特性:从依赖注入容器中获取参数的值。 +- [FromRouter]特性:从路由中获取参数的值。 +- [FromFrom]特性:从表单中获取参数的值。 +- [FromBody]特性:从HTTP请求的消息正文中获取参数的值。 + + +另外,还有一下两个特性用于指明参数是否必须使用绑定: +- BindRequiredAttribute:如果没有值绑定到此参数,或绑定不成功,这个特性将添加一个ModelState错误。 +- BindNeverAttribute:在进行模型绑定时,忽略此参数。 diff --git "a/\351\242\234\346\234\235\345\213\207/20240528-\350\277\207\346\273\244\345\231\250\345\222\214\346\227\245\345\277\227.md" "b/\351\242\234\346\234\235\345\213\207/20240528-\350\277\207\346\273\244\345\231\250\345\222\214\346\227\245\345\277\227.md" new file mode 100644 index 0000000..2d81b3d --- /dev/null +++ "b/\351\242\234\346\234\235\345\213\207/20240528-\350\277\207\346\273\244\345\231\250\345\222\214\346\227\245\345\277\227.md" @@ -0,0 +1,82 @@ +## 一、路由 + +1.在控制器上写上两个特性 + +- + [ApiController] +- + [Route("/api/...")] + +2.如果不符合restfull风格的路由的话,在action上单独写路由 + +- +[HttpGet("/api/...")] + +## 二、关于匹配到函数的处理 +(1)入参:函数的参数,模型绑定 +(2)返回值:返回的响应, +1.状态码 +2.带对象的状态码 +3.重定向 +4.内容{ + code:1000, + data:[], + msg:'请求成功' +} + +## 过滤器 + +ASP.NET Core MVC提供了以下5种类型的过滤器 +- Authorization:最先执行,用于判断用户是否授权 +- Resource过滤器 +- Action过滤器 +- Exception过滤器:用于捕获异常 +- Result过滤器 + + + +## 日志 + +日志包括两种类型: +- 系统日志:系统日志是系统在运行时向外输出的记录信息 +- 用户记录日志:用户记录日志是由开发人员在程序中适当的位置调用与日志功能相关的API输出的日志 + +一般情况下,记录日志时也可以指定其重要级别,如调试、信息、警告和错误等。 + +ASP.NET Core框架内部集成了日志功能,它主要由以下一些重要的接口组成 +- Ilogger:包括实际执行记录日志操作的方法 +- IloggerProvider:用于创建ILogger对象 +- IloggerFactory:通过IloggerProvider对象创建ILogger对象 + +1.ILogger接口 + +要记录日志,需要使用ILogger接口,它的定义如下 + +``` +public interface ILogger +{ +IDisposable BeginScope(TState state); +bool IsEnabled(LogLevel logLevel); +void Log (LogLevel logLevel,EventId eventId,TAtate state,Exception exception,Funcformatter); +} + +``` + +其中,Log方法用于记录日志,它包括5个参数,使用方法如下 + +``` +logger.Log(LogLevel.Information,0,typeof(object),null,(type,exception)=>"Hello World"); +``` + + +Log方法的第一个参数指明了这条信息的级别,日志级别即其重要程度。ASP.NET Core日志系统定义了6个级别,具体如下: +- Trace:级别最低,通常仅用于开发阶段调试问题,这些信息可能包含敏感的应用程序数据,因此不应该用于生产环境,默认情况应禁用,即不输出。 +- Debug:用于记录调试信息,这种类型的日志有助于开发人员调试应用程序 +- Information:用于记录应用程序的执行流程信息,这些信息具有一定意义 +- Warning:用于记录应用程序出现的轻微错误或其他不会导致程序停止的警告信息 +- Error:用于记录错误信息,这一类的错误将影响程序正常执行 +- Critical:严重级别最高,用于记录引起应用程序崩溃、灾难性故障等信息,如数据丢失、磁盘空间不够等 + + + + + + + diff --git "a/\351\242\234\346\234\235\345\213\207/20240530-\345\206\205\345\255\230\345\236\213\346\225\260\346\215\256\345\272\223.md" "b/\351\242\234\346\234\235\345\213\207/20240530-\345\206\205\345\255\230\345\236\213\346\225\260\346\215\256\345\272\223.md" new file mode 100644 index 0000000..3dc31e8 --- /dev/null +++ "b/\351\242\234\346\234\235\345\213\207/20240530-\345\206\205\345\255\230\345\236\213\346\225\260\346\215\256\345\272\223.md" @@ -0,0 +1,26 @@ +## 内存型数据库 +- 创建一个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 + +![alt text](./imgs/i..Repository.png) + +### 各类文件夹的代指 +- `Db`指的是内存型数据库,自己创建的数据库 +- `Domain`指的是实体类对象,用来放字段 +- `interfaces`指的是接口类对象(`I`实例名`Repository`结尾) +- `Services`是接口的实现类(实例名`Repository`结尾) \ No newline at end of file diff --git "a/\351\242\234\346\234\235\345\213\207/20240531-\346\216\245\345\217\243.md" "b/\351\242\234\346\234\235\345\213\207/20240531-\346\216\245\345\217\243.md" new file mode 100644 index 0000000..eaa99df --- /dev/null +++ "b/\351\242\234\346\234\235\345\213\207/20240531-\346\216\245\345\217\243.md" @@ -0,0 +1,54 @@ +## 接口 +- 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(); + } + ``` \ No newline at end of file -- Gitee