学习笔记
文章平均质量分 54
梦爻
这个作者很懒,什么都没留下…
展开
-
2023-05-10 MemoryCache与Redis之间的一些笔记
MemoryCache与Redis的一点小笔记原创 2023-05-10 21:08:11 · 105 阅读 · 0 评论 -
2021-01-31
强验证器:ETag使用Marvin.Cache.Headers包:Asp.Net Core中间件,可以添加HTTP Cache Headers到响应 支持缓存的过期和验证模型 Etag、Last-Modified、Expires Header、Cache-Control 可在Services进行全局配置 services.AddHttpCacheHeaders(expirse => { expirse.MaxAge = 60;原创 2021-01-31 16:53:27 · 144 阅读 · 0 评论 -
2021-01-28版本控制和缓存
版本控制:最好不要进行版本控制。原因:Api可能会发生变化功能变化 业务变化 资源表述变化 注意:变化的时候不能对现有的Api消费程序进行破坏流行的Api版本控制策略api/v1/resource api/resource?api-version=v1 自定义的header :"api-version" = v1不进行版本控制的推荐处理方式:可进化性业务或者功能进行改变,使用HATEOAS,但消费者必须检查这些HATEOAS链接 如果结果的表述变化,即增减、修改字段,则需要使原创 2021-01-29 17:12:10 · 247 阅读 · 0 评论 -
2021-01-27Vendor-specificMediaType的输入
Vendor-specificMediaType目的:为了在创建资源的时候可选择地带上某个属性,例如student资源中有一个IsOver90kg,需要可选择地带上。 需要两种创建资源的Model,即正常地StudentCreateDto和携带额外属性的StudentCreateWithWeightDto,再通过Content-Type进行选择。 不带额外属性的Content-Type为"application/json"和"application/vnd.niceboat.studentcre原创 2021-01-27 20:58:14 · 161 阅读 · 0 评论 -
2021-01-26Vendor-specificMediaTypes输出
问题继HATEOAS带来的问题,资源的自我描述性再次被破坏。 {value:[{},{}],links:[{},{}]}首要问题:Application/Json无法表述所返回的资源,而每个消息都应该包含足够的信息以便让其它东西知道如何处理信息。解决方案:创建一种新的MediaType,将资源和这种MediaType进行区分自定义的媒体类型例如:application/vnd.niceboat.hateoas+jsonvnd:vendor的缩写,原则性标识,表示这种媒体类型是供应原创 2021-01-26 14:21:49 · 476 阅读 · 0 评论 -
2021-01-25HATEOAS
HATEOASHypermedia As The Engine Of Application StateHATEOAS是rest架构风格中最复杂的约束,也是构建成熟Rest服务的核心,它的重要性打破了客户端与服务端的严格的契约,也让客户端更加的智能和自适应,而Rest本身的演化和更新则变得更容易。 有助于自我描述性和可进化性。 超媒体驱动如何消费和使用Api相较于纯粹的资源客户端更多地需要了解Api的内在逻辑 如果Api发生了一点变化,都会破坏消费者 Api无法独立于消费它的应用单独地原创 2021-01-25 15:07:34 · 143 阅读 · 1 评论 -
2021-01-21关于数据塑性
数据塑性基本事项 目的:允许Api消费者可以选择自己要返回的资源的字段 请求方式:/api/colleges?fields=id,name 目标:针对资源的字段;而非其它更底层的字段 代码 public static class IEnumerableExtensions { /// <summary> /// IEnumerable的拓展方法 /// </summary>原创 2021-01-21 15:32:28 · 105 阅读 · 0 评论 -
2021-01-20关于排序
排序排序基本信息 排序对象:针对面向外部的model 排序请求方式:orderBy=collegeName orderBy=collegeName Desc orderBy=collegeName Desc,synopsis 排序难点 属性映射:包含属性不同名、属性组合、排序反转等 应用排序:如何使用lambda表达式 复用性: 属性映射思路:PropertyMappingService : IPropertyMappingService I...原创 2021-01-20 22:51:39 · 105 阅读 · 0 评论 -
2021-01-19关于资源筛选、搜索、翻页Api
翻页针对资源进行翻页 目标对象:集合资源的数量通常比较大,需要翻页查询 作用: 避免性能问题 参数传递:参数通过QueryString进行传递,如Api/Colleges?pageNumber=1&pageSize=5 注意事项 每页的笔数需要进行控制 默认就该进行分页 应该对底层数据进行分页 翻页信息需要返回的翻页信息包含前一页和后一页的链接 其他的信息:如PageNumber、PageSize、总页数、资源总数等翻页信息的返回方原创 2021-01-19 16:39:06 · 160 阅读 · 0 评论 -
2021-01-18HttpPut、HttpPatch、HttpDelete和自定义的错误
自定义错误针对ModelState进行自定义错误 services.AddControllersWithViews() .ConfigureApiBehaviorOptions(setup => { setup.InvalidModelStateResponseFactory = context => { var原创 2021-01-19 09:19:17 · 233 阅读 · 0 评论 -
2021-01-14关于自定义的ModelBinding、HttpOptions以及输入验证
自定义的ModelBinding /// <summary> /// 自定义model binding,继承ImodelBinder /// </summary> public class ArrayModelBinder : IModelBinder { /// <summary> /// 必须实现该接口 /// </summary> /// <原创 2021-01-17 22:38:46 · 182 阅读 · 0 评论 -
2021-01-12ModelBinding、搜索与过滤、Http方法的安全性与幂等性
服务器故障:通常报500,返回的报错页面不能展示给用户,于是将生产与开发环境分开。在Configure中添加环境判断,通常也将swagger放在开发环境中。if (env.IsDevelopment()){ app.UseDeveloperExceptionPage();}else{ app.UseExceptionHandler("/Home/Error");}ModelBinding数据来源FromBody:请求的body:用来推断复杂类型参数,如mo原创 2021-01-12 16:30:31 · 82 阅读 · 0 评论 -
2021-01-11EntityModel与Dto、ActionResult与IActionResult、AutoMapper的简单使用
EntityModel和面向外部的ModelEntityModel主要面向数据库,用来表示数据库里的数据。面向外部的Model表达了要传输的东西,通常称为Dto或ViewModel其中,面向外部的Model与EntityModel的差别Dto会对EntityModel进行一个易于展示的处理 Dto会对EntityModel中不合适的内容进行处理 Dto会将多个EntityModel中的数据进行拼接,多表查询。这样做的好处是:更加健壮、可靠、易于进化。ActionResult与IAc原创 2021-01-12 09:58:15 · 665 阅读 · 0 评论 -
2020-12-31关于Swagger配置、属性路由书写以及内容协商
属性路由书写方法,原创 2020-12-31 14:53:25 · 1097 阅读 · 2 评论 -
2020-12-29关于Rustful Api的一些前期知识。
Rustful Api的一些相关知识Web Api:1、指使用Http协议并通过网络调用的Api ,需要通过URI来指定端点。2、就是一个web系统,通过URI与之进行交互。MVC:是一种用来构建UI的架构模式。1、松耦合。2、关注点分离。3、并不是一套完整的应用程序架构。Controller继承于ControllerBase,多了视图支持等功能。[ApiController]特性:用于Controller。1、要求使用属性路由。2、自动使用Http400响应。3、推定参数的绑定源。4、Mu原创 2020-12-30 21:44:15 · 330 阅读 · 1 评论 -
2020-12-15关于视图、cte和存储过程
三者简单介绍视图是一种预先定义好的查询方式,主要优点:1、简化操作,查找数据时更加直观。2、安全性,可以对用户的访问加以限制。3、独立性,忽略背后各种表的关系与结构,形成独立的报告。主要缺点为:1、性能差。2、修改受到限制,比较麻烦。CREATE VIEW All_City_Province ASSELECT C.Id,C.Name AS '市',C2.Name AS '省'FROM dbo.City CLEFT JOIN dbo.City AS C2ON C.ParentId = C2.原创 2020-12-15 23:07:34 · 286 阅读 · 0 评论 -
2020-12-14关于继承、重载与重写
类与结构面向对象的特性:封装、继承、多态类与结构是两种基本构造,本质上都是一种数据类型。封装了同一个逻辑单元的一组属性和行为(包含方法、属性和事件)。类是引用类型,结构是值类型。继承、重载、重写继承:通过继承,可以创建新类,以便重用、扩展和修改在其他类中定义的行为。其成员被继承的类称为“基类”(父类),继承这些成员的类称为“派生类”(子类)。从概念上讲,派生类是基类的专门化。重载: /// <summary> /// 父类 /// </.原创 2020-12-14 23:23:10 · 225 阅读 · 0 评论 -
2020-12-13关于数组队列以及堆栈
数组定义:一个可以储存多个同一类型数据的集合。1、可以有一维数组、多维数组或者交叉数组。(交叉数组是数组的数组)class TestArraysClass{ static void Main() { // 声明一维数组并初始化,大小为5 int[] array1 = new int[5]; // 声明一维数组并赋初值. int[] array2 = new int[] { 1, 3, 5, 7, 9 };原创 2020-12-13 23:16:06 · 136 阅读 · 0 评论 -
2020-12-11关于数据类型转化内及stringbuilder
内置值类型的关键字、范围、大小、结构 关键字 bool sbyte byte short ushort int uint long ulong decimal char double float原创 2020-12-11 17:15:54 · 156 阅读 · 0 评论 -
2020-12-11关于逻辑运算符
逻辑运算符按照优先顺序为:!(逻辑非) &(逻辑与)^(逻辑异或)|(逻辑或)&&(条件逻辑与)||(条件逻辑或)可用小括号可以调整顺序。1、&与&& 和|与||的区别是,条件逻辑运算符会进行短路int i = 1, j = 1,k = 1,l = 1;Console.WriteLine($" (++i>0)|(++j<0)={(++i > 0) | (++j < 0)},i = {i},j ={j}");Consol原创 2020-12-11 11:57:43 · 405 阅读 · 0 评论 -
2020-12-10 关于运算符
位运算符 都是对int以上位数的整数操作 int uint long ulong 而以下的如short 会被转化为 最接近的类型~(按位取反)、&(按位与)、|(按位或)、 ^(按位异或)、<<(左移)、>>(右移)按位取反指 ~x 0b_0000 -> 0b_1111 0b_1100 -> 0b_0011按位与指 x&y 0b_0011&0b_1110 -> 0b_0010 0b_1111&...原创 2020-12-10 21:43:36 · 178 阅读 · 0 评论 -
2020-12-10关于值类型和引用类型的学习
值类型与引用类型的最大区别是:值类型传值不会因为后来者改变前者,而引用类型传值后,会因为后来着改变前者。int a = 30;int b = a;b = 20;Console.WriteLine($"{a},{b}");// 值类型 a = 30,b = 20public class test{ public int x;}test A = new test();A.x = 10;Console.WriteLine($"A.x = {A.x}");test B.原创 2020-12-10 13:42:23 · 90 阅读 · 0 评论