自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 问答 (1)
  • 收藏
  • 关注

原创 2023-05-10 MemoryCache与Redis之间的一些笔记

MemoryCache与Redis的一点小笔记

2023-05-10 21:08:11 71

原创 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 115

原创 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 204

原创 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 139

原创 2021-01-26Vendor-specificMediaTypes输出

问题继HATEOAS带来的问题,资源的自我描述性再次被破坏。 {value:[{},{}],links:[{},{}]}首要问题:Application/Json无法表述所返回的资源,而每个消息都应该包含足够的信息以便让其它东西知道如何处理信息。解决方案:创建一种新的MediaType,将资源和这种MediaType进行区分自定义的媒体类型例如:application/vnd.niceboat.hateoas+jsonvnd:vendor的缩写,原则性标识,表示这种媒体类型是供应

2021-01-26 14:21:49 434

原创 2021-01-25HATEOAS

HATEOASHypermedia As The Engine Of Application StateHATEOAS是rest架构风格中最复杂的约束,也是构建成熟Rest服务的核心,它的重要性打破了客户端与服务端的严格的契约,也让客户端更加的智能和自适应,而Rest本身的演化和更新则变得更容易。 有助于自我描述性和可进化性。 超媒体驱动如何消费和使用Api相较于纯粹的资源客户端更多地需要了解Api的内在逻辑 如果Api发生了一点变化,都会破坏消费者 Api无法独立于消费它的应用单独地

2021-01-25 15:07:34 111 1

原创 2021-01-21关于数据塑性

数据塑性基本事项 目的:允许Api消费者可以选择自己要返回的资源的字段 请求方式:/api/colleges?fields=id,name 目标:针对资源的字段;而非其它更底层的字段 代码 public static class IEnumerableExtensions { /// <summary> /// IEnumerable的拓展方法 /// </summary>

2021-01-21 15:32:28 80

原创 2021-01-20关于排序

排序排序基本信息 排序对象:针对面向外部的model 排序请求方式:orderBy=collegeName orderBy=collegeName Desc orderBy=collegeName Desc,synopsis 排序难点 属性映射:包含属性不同名、属性组合、排序反转等 应用排序:如何使用lambda表达式 复用性: 属性映射思路:PropertyMappingService : IPropertyMappingService I...

2021-01-20 22:51:39 85

原创 2021-01-19关于资源筛选、搜索、翻页Api

翻页针对资源进行翻页 目标对象:集合资源的数量通常比较大,需要翻页查询 作用: 避免性能问题 参数传递:参数通过QueryString进行传递,如Api/Colleges?pageNumber=1&pageSize=5 注意事项 每页的笔数需要进行控制 默认就该进行分页 应该对底层数据进行分页 翻页信息需要返回的翻页信息包含前一页和后一页的链接 其他的信息:如PageNumber、PageSize、总页数、资源总数等翻页信息的返回方

2021-01-19 16:39:06 133

原创 2021-01-18HttpPut、HttpPatch、HttpDelete和自定义的错误

自定义错误针对ModelState进行自定义错误 services.AddControllersWithViews() .ConfigureApiBehaviorOptions(setup => { setup.InvalidModelStateResponseFactory = context => { var

2021-01-19 09:19:17 210

原创 2021-01-14关于自定义的ModelBinding、HttpOptions以及输入验证

自定义的ModelBinding /// <summary> /// 自定义model binding,继承ImodelBinder /// </summary> public class ArrayModelBinder : IModelBinder { /// <summary> /// 必须实现该接口 /// </summary> /// <

2021-01-17 22:38:46 160

原创 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 60

原创 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 624

原创 2020-12-31关于Swagger配置、属性路由书写以及内容协商

属性路由书写方法,

2020-12-31 14:53:25 1034 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 275 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 239

原创 2020-12-14关于继承、重载与重写

类与结构面向对象的特性:封装、继承、多态类与结构是两种基本构造,本质上都是一种数据类型。封装了同一个逻辑单元的一组属性和行为(包含方法、属性和事件)。类是引用类型,结构是值类型。继承、重载、重写继承:通过继承,可以创建新类,以便重用、扩展和修改在其他类中定义的行为。其成员被继承的类称为“基类”(父类),继承这些成员的类称为“派生类”(子类)。从概念上讲,派生类是基类的专门化。重载: /// <summary> /// 父类 /// </.

2020-12-14 23:23:10 201

原创 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 115

原创 2020-12-11关于数据类型转化内及stringbuilder

内置值类型的关键字、范围、大小、结构 关键字 bool sbyte byte short ushort int uint long ulong decimal char double float

2020-12-11 17:15:54 125

原创 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 352

原创 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 144

原创 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 70

原创 关于Google大陆手机号不能验证的问题

在浏览器上注册。一、选择一个合适的工具与浏览器。二、清除浏览器缓存。三、将浏览器语言更改为English,重启浏览器。四、正常注册。

2020-06-16 17:37:55 13203 2

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除