From 530498bdd2357548153103dffc579a1d0d9d93dc Mon Sep 17 00:00:00 2001 From: unknown <2873133948@qq.com> Date: Thu, 24 Jun 2021 00:55:16 +0800 Subject: [PATCH 1/9] dotnet --- .../2021-06-21.md" | 7 +- .../2021-06-22.md" | 82 ++++++++++++++++++ .../imgs/2021-06-24_004249.png" | Bin 0 -> 17279 bytes .../imgs/2021-06-24_004422.png" | Bin 0 -> 13942 bytes .../imgs/2021-06-24_004458.png" | Bin 0 -> 11846 bytes .../imgs/2021-06-24_004526.png" | Bin 0 -> 11758 bytes 6 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 "\351\237\251\345\206\260\345\206\260/2021-06-22.md" create mode 100644 "\351\237\251\345\206\260\345\206\260/imgs/2021-06-24_004249.png" create mode 100644 "\351\237\251\345\206\260\345\206\260/imgs/2021-06-24_004422.png" create mode 100644 "\351\237\251\345\206\260\345\206\260/imgs/2021-06-24_004458.png" create mode 100644 "\351\237\251\345\206\260\345\206\260/imgs/2021-06-24_004526.png" diff --git "a/\351\237\251\345\206\260\345\206\260/2021-06-21.md" "b/\351\237\251\345\206\260\345\206\260/2021-06-21.md" index aac8b00..3ff0a3e 100644 --- "a/\351\237\251\345\206\260\345\206\260/2021-06-21.md" +++ "b/\351\237\251\345\206\260\345\206\260/2021-06-21.md" @@ -32,8 +32,13 @@ dotnet sln add [-h|--help] dotnet sln add ApiTest.APi dotnet sln --in-root 将项目放在解决方案的根目录下,而不是创建解决方案文件夹。无法与 -s|--solution-folder 一起使用。如果省略此选项和 -s|--solution-folder,则结果与指定此选项相同。自 .NET Core 3.0 SDK起可用。 dotnet sln -s|--solution-folder 要将项目添加到的目标解决方案文件夹路径。 无法与 --in-root 一起使用。如果省略此选项和 --in-root,则结果与指定 --in-root 相同。自 .NET Core 3.0 SDK 起可用。 - +dotnet new sln dotnet new webapi --no-https +rm .\ApiTest.Data\ +dotnet new classlib +dotnet add package Newtonsoft.json +dotnet add ApiTest.Api reference ApiTest.Data +dotnet new classlib -n ApiTest.Domain dotnet run ``` diff --git "a/\351\237\251\345\206\260\345\206\260/2021-06-22.md" "b/\351\237\251\345\206\260\345\206\260/2021-06-22.md" new file mode 100644 index 0000000..39dca51 --- /dev/null +++ "b/\351\237\251\345\206\260\345\206\260/2021-06-22.md" @@ -0,0 +1,82 @@ +# WebApi +## GET请求 +GET:从服务器检索内容或者实体在HTTP术语。GET请求通常不包含请求体,但是是被允许的。一些网络缓存设备仅仅GET方式响应。GET请求通常不会导致服务器数据变化。 +UserController.cs +## POST +POST:用客户端提供的数据更新实体。一个POST请求通常在请求体中包含信息,这些信息在应用服务器是可以被使用的。POST请求被认为是非幂等性的,意味着如果多个请求被处理和仅仅一个请求被处理结果是不一样的。 +## PUT +PUT:添加一个由客户端提供的数据实体。一个PUT请求通常在请求体包含服务器用来创建新实体用的信息。通常,PUT请求被认为是幂等性的,意味着请求可以反复使用相同应用的结果。 +## DELETE +DELETE:删除一个基于URI内容的实体或者由客户端提供的请求体。DELETE请求通常在REST服务请求接口。 +``` +using System.Collections.Generic; +using Microsoft.AspNetCore.Mvc; +using Admin3000.Backend.Api.Entity; + +namespace Admin3000.Backend.Api.Controllers +{ + [ApiController] + [Route("[controller]")] + public class UserController: ControllerBase + { + public IEnumerable Get() + { + var users = new List{ + new Users{ + Id = 1, + Username = "沈遇", + Password = "123" + }, + new Users{ + Id = 2, + Username = "花花", + Password = "123" + }, + new Users{ + Id = 2, + Username = "辛安", + Password = "123" + }, + }; + return users; + } + [HttpGet("{id}")] + public string Get(int id) + { + return string.Format("你的id是:{0}",id); + } + [HttpPost] + public dynamic Post(dynamic model) + { + return new { + CodeStatus = 1000, + Data = model, + msg="请求成功" + }; + } + [HttpPut("{id}")] + public dynamic Put(int id,dynamic model) + { + return new{ + CodeStatus = 1000, + Data = string.Format("修改了一个指定id为{0}的用户",id), + msg="修改成功" + }; + } + [HttpDelete("{id}")] + public dynamic Delete(int id) + { + return new { + CodeStatus = 1000, + Data = string.Format("删除指定的Id为{0}的用户",id), + msg="删除成功" + }; + } + } + +} +``` +![图片无法显示](imgs\2021-06-24_004249.png) +![图片无法显示](imgs\2021-06-24_004422.png) +![图片无法显示](imgs\2021-06-24_004458.png) +![图片无法显示](imgs\2021-06-24_004526.png) \ No newline at end of file diff --git "a/\351\237\251\345\206\260\345\206\260/imgs/2021-06-24_004249.png" "b/\351\237\251\345\206\260\345\206\260/imgs/2021-06-24_004249.png" new file mode 100644 index 0000000000000000000000000000000000000000..a2655635f5ca5b36ed34624a9e58e847f6a9984d GIT binary patch literal 17279 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 literal 0 HcmV?d00001 diff --git "a/\351\237\251\345\206\260\345\206\260/imgs/2021-06-24_004422.png" "b/\351\237\251\345\206\260\345\206\260/imgs/2021-06-24_004422.png" new file mode 100644 index 0000000000000000000000000000000000000000..b86f9c8626f304e4bc3a393af7f4a3f3072badb6 GIT binary patch literal 13942 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≀kdH56}~+GPx%EH=4 ziA~Qgdm`*lPKwkUM6h)Zv26qeS_2SDuf2Zdv z`SDF<%e$Y5w-NJ(2JLP|+%vfC%bB{laipDjb?13^Zr?+{;jp6>B$@vy>;G57>%Wdj zAN!YbC_Sv)2?~%T^9#p6gQ{gKtT&Tyt+q>?lGRl<1qw9o(@R32oQSOgg)t9;e1OBs zL<4Inr`^Ivu4P}gSuYkZug;2kve^QGe9S_JUzW|j;U2e5^pfXm`JKmc*bay{eEpZs zHU*D7ZEk0$T8UU1T3IVn1%0JM5_?^~YC*T9)?=~uD#g#zFE1A2qe2~f?wP_?d72+EM>-~)bRLBqq0 zS$87HO>Ghe9y_7g70pBMB>1HL`3CPWOFTw zIg@@HkZ@g_qw2)8Rt{BdHA;`{50_38>fNx^gWaD$Wi2Y9$z?KG%%*Mprk~59!r2>L z*z9btm?BT|!h`+adLHA7U&F}ctvR9SB3u+=8wzfZT?}v2F@_Zl?j8(p#594+M;@>Y zXj7})ocFzJXd)fC=cXzOHWwD$xEVFixMDIl0lmlN?04f(ROmEZ_VV&lCgx|iksM1z zA}#mrD9a;$8%bql^32Y(w4EO=SYHulP+ZXJhfOfA)MJOjC1_8@x`nIIbRJ)Ld~Ly6(sPZ)Aep6P(z4yZB31OHIecq6 zkLxr)+5L(W_FV&(=Mb)=UbVuc3i~{5A^Fa5775FtVWkK|-A2=*sT{VV=X6+_6j$2O zlf_KBaP)^OJe*BbXSW~t;nJR)?16g`3f}jxYQ2xY0(6jLUV>Io{tH9hpJ-<;UpMzOygA}Tb6fc zrRMo){IIFMedkn`mv`=%V!ZQZ;Sa{4@D;|}!PlfR=AfTL-l8GmJuvX0hgnu2+6kLD z3VRXEzVPeRHa-K-+d`Bv9Wqpi6f8d)d`-9$3CPy=Ah<_qf-WSGv^vahX_QyYy}=;V zE`*?+50o#l8%zl8g7V)aW@4`(8Lq~ygBv$6Ifl^{FfMio;{`h&H4)dN3Ks?A8ethE zeeFwOtd8d-wZiwMYPAsMrog6ycw!2qdYb@xYB<0&5A6KXgf@7hxF%!k*77Uiq-dNc zk34<4vwX`?G65|Q&5UZke2anuNzYU94Ya9{BnopBbPFOI|Bh{LwX$zi;4(s2OHzjKQ5IPG$tly(|WyW@k zuRok$hIV76p0AfRMD?P@Zp|eCn+xStT58=Nl2uFt(;xFb*6MA2(4lK+%&yB7mNokT zlAln#VX|Z@ONFuojnKi2MAZ>32v;s(nl6V1z0^s~3M7vd|40y8$89u0IXkJH2i=`H zSwfsqO8>q8p#lio^dTqgb(xmgLKQ&2%C7xgsNtKeGzyIeGy z!j|~PvGU-T*6Q&H<<+3Q*s{yeP@#rYfyMe01Z%UvODB$v;oeoNPEd7!)*7g9`6sf5 zr=RlP_|S|3t*ArP z_z(Rbe?LcrH%0xOnfJgad_3m`5Y(*W;13mDJcNtv1ax+o$y^`|8Pv;P7@I9KpXCW! zI7h1tApTDsu_q@d8o~r@r4x3p2gOiU@5zhWG75q?(F;=y=jzo==}$QXh%p@3p{arq zjYiL4gjo!?NnwYMkq>4fa#7y#gJi0pDsrdi(D@nNI(`h29f$so=N-U$CvFF#)Oj-) z9)f1o1Hf6=;zPyM9&;|zb)3bw1_H4HgGW}_O5N-5;gAOykm73y9Kz%?8YcM^14pSo z)nR7Q$AjlD%xpRH*V|txDtzu=E|7Wgq1{xk{Q6)1-2ZL-fQvrF(*JUT{yi|f>4zUJ WAl~4+^91}Ff>KbC&%OWb_5T9a_$OTe literal 0 HcmV?d00001 diff --git "a/\351\237\251\345\206\260\345\206\260/imgs/2021-06-24_004458.png" "b/\351\237\251\345\206\260\345\206\260/imgs/2021-06-24_004458.png" new file mode 100644 index 0000000000000000000000000000000000000000..9df5d2939f41cf095efd2194c5b72a7f1e3fd17d GIT binary patch literal 11846 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 G_rCz@W^7LY literal 0 HcmV?d00001 -- Gitee From 3d93c50ee3e36023a958b853de48dbc21fe3f441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9F=A9=E5=86=B0=E5=86=B0?= <2873133948@qq.com> Date: Thu, 24 Jun 2021 08:10:12 +0800 Subject: [PATCH 2/9] =?UTF-8?q?.Net=20WebApi=20get,post,put,delete?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2021-06-22.md" | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git "a/\351\237\251\345\206\260\345\206\260/2021-06-22.md" "b/\351\237\251\345\206\260\345\206\260/2021-06-22.md" index 39dca51..6919a8d 100644 --- "a/\351\237\251\345\206\260\345\206\260/2021-06-22.md" +++ "b/\351\237\251\345\206\260\345\206\260/2021-06-22.md" @@ -1,13 +1,14 @@ # WebApi ## GET请求 GET:从服务器检索内容或者实体在HTTP术语。GET请求通常不包含请求体,但是是被允许的。一些网络缓存设备仅仅GET方式响应。GET请求通常不会导致服务器数据变化。 -UserController.cs ## POST POST:用客户端提供的数据更新实体。一个POST请求通常在请求体中包含信息,这些信息在应用服务器是可以被使用的。POST请求被认为是非幂等性的,意味着如果多个请求被处理和仅仅一个请求被处理结果是不一样的。 ## PUT PUT:添加一个由客户端提供的数据实体。一个PUT请求通常在请求体包含服务器用来创建新实体用的信息。通常,PUT请求被认为是幂等性的,意味着请求可以反复使用相同应用的结果。 ## DELETE DELETE:删除一个基于URI内容的实体或者由客户端提供的请求体。DELETE请求通常在REST服务请求接口。 + +UserController.cs ``` using System.Collections.Generic; using Microsoft.AspNetCore.Mvc; @@ -76,7 +77,10 @@ namespace Admin3000.Backend.Api.Controllers } ``` -![图片无法显示](imgs\2021-06-24_004249.png) -![图片无法显示](imgs\2021-06-24_004422.png) -![图片无法显示](imgs\2021-06-24_004458.png) -![图片无法显示](imgs\2021-06-24_004526.png) \ No newline at end of file +![图片无法显示](./imgs/2021-06-24_004249.png) + +![图片无法显示](./imgs/2021-06-24_004422.png) + +![图片无法显示](./imgs/2021-06-24_004458.png) + +![图片无法显示](./imgs/2021-06-24_004526.png) \ No newline at end of file -- Gitee From bee4b220d7b06e1103e1ed14d6729a0c21bc524e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9F=A9=E5=86=B0=E5=86=B0?= <2873133948@qq.com> Date: Thu, 24 Jun 2021 08:55:47 +0800 Subject: [PATCH 3/9] =?UTF-8?q?.NET=20WebApi=20get,post,put,delete?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E4=BC=A0=E9=80=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\351\237\251\345\206\260\345\206\260/2021-06-22.md" | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git "a/\351\237\251\345\206\260\345\206\260/2021-06-22.md" "b/\351\237\251\345\206\260\345\206\260/2021-06-22.md" index 6919a8d..ac178d7 100644 --- "a/\351\237\251\345\206\260\345\206\260/2021-06-22.md" +++ "b/\351\237\251\345\206\260\345\206\260/2021-06-22.md" @@ -7,7 +7,16 @@ POST:用客户端提供的数据更新实体。一个POST请求通常在请求 PUT:添加一个由客户端提供的数据实体。一个PUT请求通常在请求体包含服务器用来创建新实体用的信息。通常,PUT请求被认为是幂等性的,意味着请求可以反复使用相同应用的结果。 ## DELETE DELETE:删除一个基于URI内容的实体或者由客户端提供的请求体。DELETE请求通常在REST服务请求接口。 - +``` +dotnet new sln +dotnet new webapi -n ApiTest.Api +dotnet sln add ApiTest.Api +dotnet new webapi --no-https或在Startup.cs注释掉app.UseHttpsRedirection(); +dotnet run -p ApiTest.Api +安装REST Client扩展 +创建一个以.http结尾的文件 +创建.NET Core环境 +``` UserController.cs ``` using System.Collections.Generic; -- Gitee From adee200f30d3b8a7eb3420d95cebbef7c9bf9ca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9F=A9=E5=86=B0=E5=86=B0?= <2873133948@qq.com> Date: Mon, 28 Jun 2021 08:07:15 +0800 Subject: [PATCH 4/9] ef core --- .../2021-06-24.md" | 91 +++++++++++++++++++ .../2021-06-26.md" | 0 2 files changed, 91 insertions(+) create mode 100644 "\351\237\251\345\206\260\345\206\260/2021-06-24.md" create mode 100644 "\351\237\251\345\206\260\345\206\260/2021-06-26.md" diff --git "a/\351\237\251\345\206\260\345\206\260/2021-06-24.md" "b/\351\237\251\345\206\260\345\206\260/2021-06-24.md" new file mode 100644 index 0000000..acc8220 --- /dev/null +++ "b/\351\237\251\345\206\260\345\206\260/2021-06-24.md" @@ -0,0 +1,91 @@ +# WebApi +## 分页查询 +安装C# XML Documentation Comments和REST Client +``` +### +GET http://localhost:5000/users?pageIndex=1&pageSize=6&searchKey=7 +``` +UserController.cs +``` +using System.Collections.Generic; +using Microsoft.AspNetCore.Mvc; +using ApiTest.Api.Entity; +using System.Linq; + +namespace ApiTest.Api.Controllers +{ + [ApiController] + [Route("[controller]")] + public class UsersController:ControllerBase + { + public IEnumerable Get(string searchKey,int pageIndex=1,int pageSize=20) + { + var users = GetUsers().Where(x=>x.Username.Contains(searchKey)).Skip((pageIndex-1)*pageSize).Take(pageSize); + return users; + } + private IEnumerable GetUsers() + { + var count = 50; + var users = new List(); + for(int i=1;i<=count;i++) + { + var u = new Users{ + Id=1, + Username = string.Format("淙淙{0}",i), + Password = string.Format("密码{0}",i) + }; + users.Add(u); + } + return users; + } + } +} +``` +## ef core +安装ef core指令 +dotnet add package Microsoft.EntityFrameworkCore.Sqlite + +Entity +``` +Roles.cs +using System; +namespace ApiTest.Api.Entity +{ + public class Roles + { + public int Id{get;set;} + public int RoleName{get;set;} + public DateTime CreatedTime{get;set;} + public DateTime UpdatedTime{get;set;} + } +} + +UserRole.cs +namespace ApiTest.Api.Entity +{ + public class UserRole + { + public int Id{get;set;} + public int UserId{get;set;} + public int RoleId{get;set;} + } +} +Usser.cs +namespace ApiTest.Api.Entity +{ + public class Users + { + public int Id{get;set;} + public string Username{get;set;} + public string Password{get;set;} + } +} +``` + +创建数据库 +``` +dotnet tool install --global dotnet-ef +dotnet add package Microsoft.EntityFrameworkCore.Designdotnet ef migrations add InitialCreate +dotnet ef database update +``` +这会安装 dotnet ef 和设计包,这是对项目运行命令所必需的。 migrations 命令为迁移搭建基架,以便为模型创建一组初始表。 database update 命令创建数据库并向其应用新的迁移。 \ No newline at end of file diff --git "a/\351\237\251\345\206\260\345\206\260/2021-06-26.md" "b/\351\237\251\345\206\260\345\206\260/2021-06-26.md" new file mode 100644 index 0000000..e69de29 -- Gitee From 8e12a34d8d1f4da2dcdb1e085eb323ceec8efc13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9F=A9=E5=86=B0=E5=86=B0?= <2873133948@qq.com> Date: Thu, 1 Jul 2021 10:16:34 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2021-06-26.md" | 37 +++++++++++++++++++ .../2021-06-28.md" | 29 +++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 "\351\237\251\345\206\260\345\206\260/2021-06-28.md" diff --git "a/\351\237\251\345\206\260\345\206\260/2021-06-26.md" "b/\351\237\251\345\206\260\345\206\260/2021-06-26.md" index e69de29..c5f72f8 100644 --- "a/\351\237\251\345\206\260\345\206\260/2021-06-26.md" +++ "b/\351\237\251\345\206\260\345\206\260/2021-06-26.md" @@ -0,0 +1,37 @@ +# 数据迁移 +1. 由定义好的数据库模型(实体类),生成数据迁移文件,命令:dotnet ef migrations add InitialCreate + +2. 由数据迁移文件,更新表结构到数据,命令:dotnet ef database update +## 控制反转和依赖注入 +区别: + 控制反转:创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在xml文件控制,侧重于原理。 + + 依赖注入:创建对象实例时,为这个对象注入属性值或其他对象实例,侧重于现实。 + +IOC模式,系统中通过引入实现了IOC模式的IOC容器,即可由IOC容器来管理对象的生命周期、依赖关系等,从而使得反应程序和依赖性规范与实际的应用程序代码分开。其中一个特点就是通过文本的配置文件进行应用程序组件间相互关系的配置,而不用重新修改并编译具体的代码。 + +IOC中最基本的Java技术就是“反射”编程。反射又是一个生涉的名词,通俗的说反射就是根据给出的类名(字符串)来生成对象。这种编程方式可以让对象在生成时才决定要生成哪一种对象。反射的应用是很广泛,象中都是用“反射”做为最基本的技术手段。 + +概念: + +控制反转是一个重要的面向对象编程的法则来消减计算机程序的耦合问题,也是轻量级的Spring框架的核心。控制反转一般分为两种类型,依赖注入和依赖查找。依赖注入应用比较广泛。 + +依赖注入:组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。容器全权负责的组件的装配,它会把符合依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象。通过JavaBean属性注射依赖关系的做法称为设值方法注入;将依赖关系作为构造函数参数传入的做法称为构造子注入。 + +## 使主键自增长 +``` +dotnet build +dotnet ef database update +dotnet add package System.ComponentModel +dotnet ef migrations add 修改自增长 +上行代码运行显示内容: +An operation was scaffolded that may result in the loss of data. Please review the migration for accuracy. +脚手架操作可能会导致数据丢失.请检查迁移的准确性. +dotnet ef database update +报错:To change the IDENTITY property of a column, the column needs to be dropped and recreated. +要更改列的 IDENTITY 属性,需要删除并重新创建该列. +dotnet ef migrations add 初始化自增长 +删除之前创建的数据库后,可以运行一波dotnet clean进行清理 +dotnet ef database update再刷新一哈数据库 +先F5运行起来再去数据库查询 +``` \ No newline at end of file diff --git "a/\351\237\251\345\206\260\345\206\260/2021-06-28.md" "b/\351\237\251\345\206\260\345\206\260/2021-06-28.md" new file mode 100644 index 0000000..e8ae649 --- /dev/null +++ "b/\351\237\251\345\206\260\345\206\260/2021-06-28.md" @@ -0,0 +1,29 @@ +### 完整的运行代码 +``` +dotnet new sln 创建模板 +dotnet new webapi -n ApiTest.Api +cd ./ApiTest.Test/ +dotnet new webapi -n ApiTest.Api --no-https +dotnet sln add ApiTest.Api 添加到解决方案 +dotnet run -p ApiTest.Api +dotnet run 运行 +dotnet add package Microsoft.EntityFrameworkCore.Sqlserver 添加Sqlserver安装包 +dotnet add package Microsoft.EntityFrameworkCore +dotnet add package Microsoft.EntityFrameworkCore.Sqlite 添加Sqlite安装包 +dotnet tool install --global dotnet-ef 全局安装 +dotnet add package Microsoft.EntityFrameworkCore.Design 添加设计包 +dotnet ef migrations add 初始化数据库 +dotnet ef datbase update 更新数据库 +dotnet ef migrations add 添加角色和用户角色 -p ApiTest.Api +dotnet build 还原 +dotnet ef database update +dotnet ef database drop +dotnet ef migrations add 尝试建立主外键关系 +dotnet ef database update +dotnet ef database drop +dotnet clean +dotnet build +dotnet add package System.ComponentModel +dotnet ef migration add 修改自增 +dotnet ef migrations add +``` \ No newline at end of file -- Gitee From 091550b4d0ce87eee865616af2dbc2b52d2dbbaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9F=A9=E5=86=B0=E5=86=B0?= <2873133948@qq.com> Date: Fri, 9 Jul 2021 10:28:30 +0800 Subject: [PATCH 6/9] ef core api --- .../2021-06-28.md" | 1 + .../2021-06-30.md" | 83 ++++++++++++++++++ .../2021-07-01.md" | 39 ++++++++ .../2021-07-03.md" | 9 ++ .../2021-07-05.md" | 0 .../imgs/2021-07-08_111837.png" | Bin 0 -> 50810 bytes 6 files changed, 132 insertions(+) create mode 100644 "\351\237\251\345\206\260\345\206\260/2021-06-30.md" create mode 100644 "\351\237\251\345\206\260\345\206\260/2021-07-01.md" create mode 100644 "\351\237\251\345\206\260\345\206\260/2021-07-03.md" create mode 100644 "\351\237\251\345\206\260\345\206\260/2021-07-05.md" create mode 100644 "\351\237\251\345\206\260\345\206\260/imgs/2021-07-08_111837.png" diff --git "a/\351\237\251\345\206\260\345\206\260/2021-06-28.md" "b/\351\237\251\345\206\260\345\206\260/2021-06-28.md" index e8ae649..e7bd88f 100644 --- "a/\351\237\251\345\206\260\345\206\260/2021-06-28.md" +++ "b/\351\237\251\345\206\260\345\206\260/2021-06-28.md" @@ -12,6 +12,7 @@ dotnet add package Microsoft.EntityFrameworkCore dotnet add package Microsoft.EntityFrameworkCore.Sqlite 添加Sqlite安装包 dotnet tool install --global dotnet-ef 全局安装 dotnet add package Microsoft.EntityFrameworkCore.Design 添加设计包 +dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer dotnet ef migrations add 初始化数据库 dotnet ef datbase update 更新数据库 dotnet ef migrations add 添加角色和用户角色 -p ApiTest.Api diff --git "a/\351\237\251\345\206\260\345\206\260/2021-06-30.md" "b/\351\237\251\345\206\260\345\206\260/2021-06-30.md" new file mode 100644 index 0000000..9cbec1b --- /dev/null +++ "b/\351\237\251\345\206\260\345\206\260/2021-06-30.md" @@ -0,0 +1,83 @@ +# 接口的实现 +IRepository.cs +``` +using Admin10.Backend.Api.Entity; +using System.Threading.Tasks; +using System.Collections.Generic; +using System.Linq; + +namespace Admin10.Backend.Api.Repository +{ + public interface IRepository where T : BaseEntity + { + IQueryable Table {get;set;} + + T GetById(object id); + + void Insert(T entity); + + Task InsertAsync(T entity); + + void InsertBulk(IEnumerable entities); + + Task InsertBulkAsync(IEnumerable entities); + + void Delete(object id); + + void DeleteBulk(IEnumerable ids); + + void Update(T entity); + + void UpdateBulk(IEnumerable entities); + void updateUser(Users user); + } +} +``` +## IRepository和IRepository +框架的重构想的最多的最重要的几个问题: + +1. 解耦(每层可以替换其它的,比如换一个UI层可以把Web项目快速转换成winform项目) + +2. 扩展性(可以灵活抹去框架的某个层,让其他的第三方框架依据自己的接口实现该层的逻辑,其它层不变,也就是插拨扩展) +3. 灵活(开发便捷,使用灵活) + +4. 维护性(别人了解框架后,可以让别人无障碍维护) + +IRepository接口定义形式(其中IEntity是一个实体类接口): +``` +public interface IRepository where T : Entity.IEntity +{ + T FindBy(string primaryKey); + IEnumerable FindAll(); + IEnumerable FindAll(string where); + IEnumerable FindAll(string where, string order); + IEnumerable FindAll(int pageIndex, int pageSize, string where, string order, out int count); + void Add(T entity); + void Delete(T entity); + void DeleteAll(); + void DeleteAll(string where); + void DeleteAll(System.Collections.IEnumerable pkValues); + void Update(T entity); + bool Exists(string primaryKey); +} +``` +IRepository和接口IEntity通过泛型T结合在了一起,形成了耦合。 + +每个IEntity的子类都得对应一个IRepository的子类 + +IRepository还是IRepository 都各自有各自的优势: +1. IRepository的子类对实体类是很专注的,它只可以操作一个实体类,对IRepository的子类的修改不会影响到其他实体类的操作 + +从而可以实现对应实体类的个性化拓展; + +2. IRepository可以操作所有的实体类,修改IRepository的子类则会影响所有的实体的操作 + +所以IRepository接口一个重要的优势是: + +在某个实体类的Server层可以统一用IRepository类的方法实现业务, + +不需要像```IRepository```实现方式一样,New额外的对象就才可以操作其他实体类, + +只要在```[Repository.方法]```里的T换成其他实体类就可以了 + +这对解耦来说是有好处的。 \ No newline at end of file diff --git "a/\351\237\251\345\206\260\345\206\260/2021-07-01.md" "b/\351\237\251\345\206\260\345\206\260/2021-07-01.md" new file mode 100644 index 0000000..615ecd3 --- /dev/null +++ "b/\351\237\251\345\206\260\345\206\260/2021-07-01.md" @@ -0,0 +1,39 @@ +# ef core api +dotnet restore +dotnet add package Micorsoft.EntityFrameworkCore:EF框架的核心包 +dotnet add package Micorsoft.EntityFrameworkCore.SqlServer:针对SqlServer数据库的扩展,使用SqlServer数据库必须 +dotnet add package Micorsoft.EntityFrameworkCore.Tools +dotnet add package Micorosft.EntityFrameworkCore.Design:用户根据现有的数据库生成模型代码 +dotnet add package Microsoft.EntityFrameworkCore.SqlServer.Design + +生成实体及上下文对象 +``` +protected override void OnConfiguring(DbContextOptionsBuilder options) + { + options.UseSqlServer(@"server=.;database=Admin10;uid=sa;pwd=123456;"); + } +``` + +在appsettings.json文件中配置: +``` +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "AllowedHosts": "*", + "TokenParameter":{ + "secret":"123456123456", + "issuer":"Weizi", + "accessExpiration":120, + "regreshExpiration":1440 + } +} +``` +在Startup.cs文件中的ConfigureServices方法中注入上下文对象: +``` +services.AddDbContext(o => o.UseSqlServer()); +``` \ No newline at end of file diff --git "a/\351\237\251\345\206\260\345\206\260/2021-07-03.md" "b/\351\237\251\345\206\260\345\206\260/2021-07-03.md" new file mode 100644 index 0000000..a1afd88 --- /dev/null +++ "b/\351\237\251\345\206\260\345\206\260/2021-07-03.md" @@ -0,0 +1,9 @@ +# 复习C# +栈:它是一个内存数组,是一个先进后出的数据结构 +栈的特征:数据只能从栈顶进,从栈顶出 +堆:它是一个内存区域,可以分配大块区域储存某类型的数据,与栈不同的是它里面的数据可以任意排序和一出 + +什么是泛型:https://www.cnblogs.com/zhouzhou-aspnet/articles/2591596.html + +复习C#知识,如图所示 +![图片无法显示](./imgs/2021-07-08_111837.png) \ No newline at end of file diff --git "a/\351\237\251\345\206\260\345\206\260/2021-07-05.md" "b/\351\237\251\345\206\260\345\206\260/2021-07-05.md" new file mode 100644 index 0000000..e69de29 diff --git "a/\351\237\251\345\206\260\345\206\260/imgs/2021-07-08_111837.png" "b/\351\237\251\345\206\260\345\206\260/imgs/2021-07-08_111837.png" new file mode 100644 index 0000000000000000000000000000000000000000..b163d3a273b19daf435d1ec300adf1462269072f GIT binary patch literal 50810 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 G2K^r{mLsbG literal 0 HcmV?d00001 -- Gitee From 89fcdc65a60a754b9a84758a5730332476a7583d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9F=A9=E5=86=B0=E5=86=B0?= <2873133948@qq.com> Date: Fri, 9 Jul 2021 14:26:48 +0800 Subject: [PATCH 7/9] jwt,token --- .../2021-07-01.md" | 4 -- .../2021-07-05.md" | 51 +++++++++++++++++++ 2 files changed, 51 insertions(+), 4 deletions(-) diff --git "a/\351\237\251\345\206\260\345\206\260/2021-07-01.md" "b/\351\237\251\345\206\260\345\206\260/2021-07-01.md" index 615ecd3..64a6b36 100644 --- "a/\351\237\251\345\206\260\345\206\260/2021-07-01.md" +++ "b/\351\237\251\345\206\260\345\206\260/2021-07-01.md" @@ -32,8 +32,4 @@ protected override void OnConfiguring(DbContextOptionsBuilder options) "regreshExpiration":1440 } } -``` -在Startup.cs文件中的ConfigureServices方法中注入上下文对象: -``` -services.AddDbContext(o => o.UseSqlServer()); ``` \ No newline at end of file diff --git "a/\351\237\251\345\206\260\345\206\260/2021-07-05.md" "b/\351\237\251\345\206\260\345\206\260/2021-07-05.md" index e69de29..17f3241 100644 --- "a/\351\237\251\345\206\260\345\206\260/2021-07-05.md" +++ "b/\351\237\251\345\206\260\345\206\260/2021-07-05.md" @@ -0,0 +1,51 @@ +# jwt asp。 net core +## 什么是JWT +JSON Web Token(JWT)是目前最流行的跨身份验证解决方案。 + +JWT是能代表用户身份的令牌,可以使用JWT令牌在api接口中效验用户的身份以确认用户是否有访问api的权限。 + +JWT中包含了身份认证必须的参数以及用户自定义的参数,JWT可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。 + +aspnet core中自带了一个jwt帮助类,其实原理一样,对上面做了封装,丰富了一个内容,我们继续使用一个静态方法 + +## Payload 有效载荷 +Payload 部分也是一个JSON对象,用来存放实际需要传递的数据。JWT 规定了7个官方字段,供选用。 + ++ iss (issuer):签发人 ++ exp (expiration time):过期时间 ++ sub (subject):主题 ++ aud (audience):受众 ++ nbf (Not Before):生效时间 ++ iat (Issued At):签发时间 ++ jti (JWT ID):编号 + +在Startup.cs文件中的ConfigureServices方法中注入上下文对象: +``` +services.AddDbContext(o => o.UseSqlServer()); +``` + +dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer +显示框架不兼容,运行下列 +dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer -h +dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer -v 3.1 + +在Params添加TokenParameter.cs文件: +``` +namespace Admin3000.Backend.Api.Params +{ + public class TokenParameter + { + //生成token的所需要的密钥,一定不能泄漏 + public string Secret { get; set; } + + // 发行token的发行人(可以是个人或者组织) + public string Issuer { get; set; } + + // token的有效分钟数 + public int AccessExpiration { get; set; } + + // RefreshExpiration的有效分钟数 + public int RefreshExpiration { get; set; } + } +} +``` \ No newline at end of file -- Gitee From 3a80ac26b13813f954b94079500eb4055312efed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9F=A9=E5=86=B0=E5=86=B0?= <2873133948@qq.com> Date: Fri, 9 Jul 2021 14:29:42 +0800 Subject: [PATCH 8/9] ef core api --- "\351\237\251\345\206\260\345\206\260/2021-07-01.md" | 2 ++ 1 file changed, 2 insertions(+) diff --git "a/\351\237\251\345\206\260\345\206\260/2021-07-01.md" "b/\351\237\251\345\206\260\345\206\260/2021-07-01.md" index 64a6b36..b7c1635 100644 --- "a/\351\237\251\345\206\260\345\206\260/2021-07-01.md" +++ "b/\351\237\251\345\206\260\345\206\260/2021-07-01.md" @@ -1,10 +1,12 @@ # ef core api +``` dotnet restore dotnet add package Micorsoft.EntityFrameworkCore:EF框架的核心包 dotnet add package Micorsoft.EntityFrameworkCore.SqlServer:针对SqlServer数据库的扩展,使用SqlServer数据库必须 dotnet add package Micorsoft.EntityFrameworkCore.Tools dotnet add package Micorosft.EntityFrameworkCore.Design:用户根据现有的数据库生成模型代码 dotnet add package Microsoft.EntityFrameworkCore.SqlServer.Design +``` 生成实体及上下文对象 ``` -- Gitee From 19835c74c7cccf99b14fb82222dd361f5a1fb5b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9F=A9=E5=86=B0=E5=86=B0?= <2873133948@qq.com> Date: Mon, 23 Aug 2021 07:41:46 +0000 Subject: [PATCH 9/9] =?UTF-8?q?update=20=E9=9F=A9=E5=86=B0=E5=86=B0/2021-0?= =?UTF-8?q?6-28.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\351\237\251\345\206\260\345\206\260/2021-06-28.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/\351\237\251\345\206\260\345\206\260/2021-06-28.md" "b/\351\237\251\345\206\260\345\206\260/2021-06-28.md" index e7bd88f..3a75bc0 100644 --- "a/\351\237\251\345\206\260\345\206\260/2021-06-28.md" +++ "b/\351\237\251\345\206\260\345\206\260/2021-06-28.md" @@ -14,7 +14,7 @@ dotnet tool install --global dotnet-ef 全局安装 dotnet add package Microsoft.EntityFrameworkCore.Design 添加设计包 dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer dotnet ef migrations add 初始化数据库 -dotnet ef datbase update 更新数据库 +dotnet ef database update 更新数据库 dotnet ef migrations add 添加角色和用户角色 -p ApiTest.Api dotnet build 还原 dotnet ef database update -- Gitee