前言 前文已经提及到了endponint 是怎么匹配到的,也就是说在UseRouting 之后的中间件都能获取到endpoint了,如果能够匹配到的话,那么UseEndpoints又做了什么呢?它是如何执行我们的action的呢. 正文 直接按顺序看代码好了: public static IApplicationBuilder UseEndpoints(this IApplicationBuilder builder, Action<IEndpointRouteBuilder> configu…
前言 简单介绍一下异常中间件的使用. 正文 if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } 这样写入中间件哈,那么在env环境下就会去执行UseDeveloperExceptionPage. public static IApplicationBuilder UseDeveloperExceptionPage(this IApplicationBuilder app) { if (app == null) { throw…
前言 简单整理一下缓存. 正文 缓存是什么? 缓存是计算结果的"临时"存储和重复使用 缓存本质是用空间换取时间 缓存的场景: 计算结果,如:反射对象缓存 请求结果,如:DNS 缓存 临时共享数据,如:会话存储 热点访问内容页,如:商品详情 热点变更逻辑数据,如:秒杀的库存数 缓存的策略: 越接近最终的数据结构,效果比较好 缓存命中率越高越好,命中率低意味着空间的浪费. 缓存的位置: 浏览器中 反向代理服务器中(nginx) 应用进程内存中 分布式存储系统中(redis) 缓存实现的要点…
前言 简单整理一下Mediator. 正文 Mediator 名字是中介者的意思. 那么它和中介者模式有什么关系呢?前面整理设计模式的时候,并没有去介绍具体的中介者模式的代码实现. 如下: https://www.cnblogs.com/aoximin/p/13600464.html 之所以没写代码就是因为它现在是一种思想,以前的简单的已经很难满足我们现在开发的需求了. 那么看下Mediator 是如何做的吧. Mediator 这个服务,是如何让我们的命令查询职责分离的. 首先安装一下包: M…
前言 简单整理一下cookie的跨站攻击,这个其实现在不常见,因为很多公司都明确声明不再用cookie存储重要信息,不过对于老站点还是有的. 正文 攻击原理: 这种攻击要达到3个条件: 用户访问了我们的站点. 用户通过cookie存储和传递身份信息 用户访问了坏站点 1和3根本控制不了,那么控制的就只有2,就是不使用cookie. 但是有些站点改动太大,那么是否还有其他方式呢? 防御方式: 不使用cookie存储和传输身份认证 使用antiforgerytoken,anti-forgery 防伪…
前言 前面介绍了认证中间件,下面看一下授权中间件. 正文 app.UseAuthorization(); 授权中间件是这个,前面我们提及到认证中间件并不会让整个中间件停止. 认证中间件就两个作用,我们的认证方案如果实现了IAuthenticationRequestHandler,那么会调用HandleRequestAsync判断是否继续运行. 然后我们设置默认的认证方案,那么会调用其认证方案的具体的处理,如果认证成功,那么会赋予context.User. 但是在这个认证中间件如果认证不过,那么也…
前言 简单整理一下静态中间件. 正文 我们使用静态文件调用: app.UseStaticFiles(); 那么这个默认会将我们根目录下的wwwroot作为静态目录. 这个就比较值得注意的,可能刚开始学.net core 的小伙伴,会直接把脚本写在更目录script这样是访问不到的. 当然了,你可以配置参数.可以给UseStaticFiles传递参数.不过建议不要这么干,因为这是一种默认的约定. 在wwwroot下建立一个index.html,那么访问http://localhost/index.…
前言 简单整理一下配置中心. 正文 什么时候需要配置中心? 多项目组并行协作 运维开发分工职责明确 对风险控制有更高诉求 对线上配置热更新有诉求 其实上面都是套话,如果觉得项目不方便的时候就需要用配置中心了. apollo 配置中心系统的能力: 权限与审计 版本管理 热更新 原生支持java和.net 客户端 项目热度可以,不会出现bug没人修的情况 那么就实验一下.这里就不演示安装了. 然后官方有个demo,我直接用demo演示就好.http://106.54.227.205/ 这个地址.账户…
前言 前文提及到了当我们的配置文件修改了,那么从 configurationRoot 在此读取会读取到新的数据,本文进行扩展,并从源码方面简单介绍一下,下面内容和前面几节息息相关. 正文 先看一下,如果文件修改,那么是否有一个回调函数,可以回调呢? 答案是有的: IChangeToken IConfiguration.GetReloadToken() 这里演示一下: IConfigurationBuilder builder = new ConfigurationBuilder(); build…
前文 前面整理了仓储层,工作单元模式,同时简单介绍了一下mediator. 那么就mediator在看下领域事件启到了什么作用吧. 正文 这里先注册一下MediatR服务: // 注册中间者:MediatR services.AddMediatRServices(); 具体注册: /// <summary> /// 注册 ??? /// </summary> /// <param name="services"></param> ///…