前言 简单整理一些配置的验证. 正文 配置的验证大概分为3类: 直接注册验证函数 实现IValidteOptions 使用Microsoft.Extensions.Options.DataAnnotations 直接注册验证函数 服务: public class SelfService : ISelfService { IOptionsMonitor<SelfServiceOption> _options; public SelfService(IOptionsMonitor<SelfS…
前言 前面基本介绍了,官方对于asp .net core 设计配置和设计服务的框架的一些思路.看下服务和配置之间是如何联系的吧. 正文 服务: public interface ISelfService { string ShowOptionName(); } public class SelfService : ISelfService { IOptions<SelfServiceOption> _options; public SelfService(IOptions<SelfSer…
前言 简单整理一下polly 重试. 正文 在开发程序中一般都有一个重试帮助类,那么polly同样有这个功能. polly 组件包: polly 功能包 polly.Extensions.Http 专门针对http的扩展包 Miscrosoft.Extension.Http.Polly 看到这个名字,那么99%是针对官方.net core的扩展包,是HttpClientFactory 的扩展. polly有下面一些功能: 失败重试 服务熔断 超时处理 舱壁处理 缓存策略 失败降级 组合策略 其他…
前言 前文讲述了,服务和配置直接的配合,这一节写一下,当配置文件修改了,每个服务如何感知自己的配置. 正文 服务感知到自己的配置发生变化,这就牵扯出两个东西: IoptionsMonitor<out TOptions> IoptionSnapshot<out TOptions> 在作用域范围使用IoptionSnapshot,在单例中使用IoptionsMonitor . IoptionsMonitor 先来演示作用域范围的使用. 配置: { "SelfService&q…
前言 介绍第三方依赖注入框架Autofac,看看为我们解决什么问题. 下面介绍4个点: 命名注册 属性注册 aop 注入 子容器命名 正文 为什么我们需要使用第三方框架?第三方框架为我们做了什么?第三方框架扩展了哪一个部分? 这里主要介绍一下Autofac. Autofac 主要是替换了我们ServiceProviderFactory 这个东西. public interface IServiceProviderFactory<IContainerBuilder> 我们使用的时候这样用: Ho…
前言 本节开始整理日志相关的东西.先整理一下日志的基本原理. 正文 首先介绍一下包: Microsoft.Extengsion.Logging.Abstrations 这个是接口包. Microsoft.Extengsion.Logging 这个是实现包 Microsoft.Extengsion.Logging.Console 这个是扩展包 代码如下: static void Main(string[] args) { IConfigurationBuilder configurationBui…
前言 前面介绍了认证中间件,下面看一下授权中间件. 正文 app.UseAuthorization(); 授权中间件是这个,前面我们提及到认证中间件并不会让整个中间件停止. 认证中间件就两个作用,我们的认证方案如果实现了IAuthenticationRequestHandler,那么会调用HandleRequestAsync判断是否继续运行. 然后我们设置默认的认证方案,那么会调用其认证方案的具体的处理,如果认证成功,那么会赋予context.User. 但是在这个认证中间件如果认证不过,那么也…
前言 简单整理一下工作单元模式. 正文 工作单元模式有3个特性,也算是其功能: 使用同一上下文 跟踪实体的状态 保障事务一致性 工作单元模式 主要关注事务,所以重点在事务上. 在共享层的基础建设类库中加入: /// <summary> /// 工作单元接口 /// </summary> public interface IUnitOfWork : IDisposable { /// <summary> /// 保存变更 /// </summary> ///…
前言 本来想整理到<<重新整理.net core 计1400篇>>里面去,但是后来一想,整理 .net core 实践篇 是偏于实践,故而分开. 因为是重新整理,那么就从配置开始整理.以下只是个人理解,如有错误,望请指点谢谢. 正文 在我们创建好一个应用的时候,那么出现在我们视野的是一个这样的东西: public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Buil…
前言 介绍一下配置系统中的配置文件,很多服务的配置都写在配置文件中,也是配置系统的大头. 正文 在asp .net core 提供了下面几种配置文件格式的读取方式. Microsoft.extensions.configuration.Ini Microsoft.extensions.configuration.Json Microsoft.extensions.configuration.NewtonsoftJson Microsoft.extensions.configuration.Xml…
前言 在asp .net core 中我们会看到一个appsettings.json 文件,它就是我们在服务中的各种配置,是至关重要的一部门. 不管是官方自带的服务,还是我们自己编写的服务都是用它来实现自己服务的动态配置,这就是约定. 配置文件之所以会成为约定,最主要的原因就是好用,不然可能第三方的配置文件管理的就会出来替代官方的配置文件管理系统,官方也提供了对应的接口来让第三方接入. 正文 官方提供了 Microsoft.Extensions.Configuration.Abstration接…
前言 这里介绍一下.net core的依赖注入框架,其中其代码原理在我的另一个整理<<重新整理 1400篇>>中已经写了,故而专门整理应用这一块. 以下只是个人整理,如有问题,望请指点. 正文 为什么有这个依赖注入呢? 假设人们面临这样一个问题. 比如说一个人做飞机去北京.那么人和飞机有什么关系呢?人和北京有什么关系呢? 假设有3个主体类,一个是人一个是飞机一个是北京.他们之间到底应该怎么组织呢? 先说人和北京的关系,人要去北京,那么飞机就是一个交通工具.是的,只是一个交通工具,那…
前言 简单介绍一下重定向攻击. 正文 攻击思路: 看着上面挺复杂的,其实是一些很简单的步骤. 攻击者通过某些手段,让用户打开了一个好站点,打开的这个地址里面带有重定向信息,重定向信息就是自己伪造的站点. 这是因为我们一般不知道网站从哪个页面而来,登录后会返回伪造的站点,也就是我们的后台会利用重定向信息. 然后用户就输入了正确的账户密码,然后重定向到伪造的站点,这个伪造的站点也是一个登录页面,和真实站点一模一样. 这个时候用户以为自己账户密码输入错误,然后再输入一遍,这个时候攻击者就拿到了用户的账…
通过 ASP.NET Core,开发者可轻松配置和管理其应用的安全性. ASP.NET Core 中包含管理身份验证.授权.数据保护.SSL 强制.应用机密.请求防伪保护及 CORS 管理等等安全方面的处理. 通过这些安全功能,可以生成安全可靠的 ASP.NET Core 应用.而我们这一章就来说道说道如何在ASP.NET Core中处理"跨站请求伪造(XSRF/CSRF)攻击"的,希望对大家有所帮助! 本文已收录至<.NET Core实战项目之CMS 第一章 入门篇-开篇及总体…
前言 前文已经基本写了一下配置文件系统的一些基本原理.本文介绍一下命令行导入配置系统. 正文 要使用的话,引入Microsoft.extensions.Configuration.commandLine 包. 代码: IConfigurationBuilder builder = new ConfigurationBuilder(); builder.AddCommandLine(args); var configurationRoot = builder.Build(); Console.Wr…
前言 前文提及到了当我们的配置文件修改了,那么从 configurationRoot 在此读取会读取到新的数据,本文进行扩展,并从源码方面简单介绍一下,下面内容和前面几节息息相关. 正文 先看一下,如果文件修改,那么是否有一个回调函数,可以回调呢? 答案是有的: IChangeToken IConfiguration.GetReloadToken() 这里演示一下: IConfigurationBuilder builder = new ConfigurationBuilder(); build…
前言 前文中我们去获取value值的时候,都是通过configurationRoot 来获取的,如configurationRoot["key"],这种形式. 这种形式有一个不好的地方,那就是不方便.那么看下.net core如何将其转换为强类型. 正文 引入:Microsoft.extensions.configuration.Binder 这个包. 配置文件内容如下: { "key1": "IamString", "key2&quo…
前言 在当今在互联网微服务比较适用的情况下,docker 可以说一个利器.每次我们打包docker的时候都是适用docker 的配置文件,那么配置文件里面会设置环境变量,这个时候需要我们的应用能够识别到这些环境变量并作出相应的选择. 适用场景: docker 运行环境 k8s 运行环境 因为他们都是隔离机制的,故而环境变量能够发挥其非常好的作用. 正文 引入:microsoft.extensions.configuration.environmentVariables 这个包. 设置环境变量:…
前言 市面上已经有很多配置中心集成工具了,故此不会去实践某个框架. 下面链接是apollo 官网的教程,实在太详细了,本文介绍一下扩展数据源,和简单翻翻阅一下apollo 关键部分. apollo 服务配置: https://github.com/ctripcorp/apollo/wiki/.Net客户端使用指南 apollo .net 客户端配置: https://github.com/ctripcorp/apollo.net/tree/dotnet-core/Apollo.Configura…
前言 简单整理一下配置中心. 正文 什么时候需要配置中心? 多项目组并行协作 运维开发分工职责明确 对风险控制有更高诉求 对线上配置热更新有诉求 其实上面都是套话,如果觉得项目不方便的时候就需要用配置中心了. apollo 配置中心系统的能力: 权限与审计 版本管理 热更新 原生支持java和.net 客户端 项目热度可以,不会出现bug没人修的情况 那么就实验一下.这里就不演示安装了. 然后官方有个demo,我直接用demo演示就好.http://106.54.227.205/ 这个地址.账户…
前言 前面介绍了服务与日志之间的配置,那么我们服务会遇到下面的场景会被遇到一些打log的问题. 前面我提及到我们的log,其实是在一个队列里面,而我们的请求是在并发的,多个用户同时发送请求这个时候我们的日志是错乱的. 如果有一个错误,那么我们只能过知道这个错误是哪里报错了,但是我们不知道触发的流程是什么样的,这对我们的debug不友好. 那么我们这时候就可以设置日志作用域. 正文 日志作用域适合下面的场景: 事务 因为一个事务有多个操作,那么希望这些操作能够有一个标识符,能够展示某一次事务的完整…
前言 简单介绍一下.net core的中间件. 正文 官方文档已经给出了中间件的概念图: 和其密切相关的是下面这两个东西: IApplicationBuilder 和 RequestDelegate(HttpContext context) IApplicationBuilder : public interface IApplicationBuilder { IServiceProvider ApplicationServices { get; set; } IFeatureCollectio…
前言 简单整理一下静态中间件. 正文 我们使用静态文件调用: app.UseStaticFiles(); 那么这个默认会将我们根目录下的wwwroot作为静态目录. 这个就比较值得注意的,可能刚开始学.net core 的小伙伴,会直接把脚本写在更目录script这样是访问不到的. 当然了,你可以配置参数.可以给UseStaticFiles传递参数.不过建议不要这么干,因为这是一种默认的约定. 在wwwroot下建立一个index.html,那么访问http://localhost/index.…
前言 简单整理一下HttpClientFactory . 正文 这个HttpFactory 主要有下面的功能: 管理内部HttpMessageHandler 的生命周期,灵活应对资源问题和DNS刷新问题 支持命名话.类型化配置,集中管理配置,避免冲突. 灵活的出站请求管道配置,轻松管理请求生命周期 内置管道最外层和最内层日志记录器,有information 和 Trace 输出 核心对象: HttpClient HttpMessageHandler SocketsHttpHandler Dele…
前言 简单整理一下grpc. 正文 什么是grpc? 一个远程过程调用框架,可以像类一样调用远程方法. 这种模式一般来说就是代理模式,然后都是框架自我生成的. 由google 公司发起并开源,故而前面有个g. grpc的特点: 提供几乎所有主流语言的实现,打破语言隔阂. 基于http/2,开放协议,收到广泛的支持,易于实现和集成 http/2 有个特点哈,就是更快,可以了解下,后续会专门整理关于http相关的,要等网络原理整理完后. 默认使用protocol buffers 序列化,性能相较于r…
前言 简单整理一下网关. 正文 在介绍网关之前,介绍一下BFF,BFF全称是Backend For Frontend,它负责认证授权,服务聚合,目标是为前端提供服务. 说的通透一点,就是有没有见过这种服务. 上述就是buff通过代理其他服务来让前端访问.这时候就有人说了,这不就是网关吗? 是的,个人理解这本来就属于一种网关.以前网关只负责数据协议的转发,现在变得高级了,功能更多了. 但是如果只负责数据协议的转发,那么就有一个专门的认证服务.每次用户访问网关的时候,网关要转到认证服务去认证,然后才…
前言 前文介绍了一些基本思路,那么这里介绍一下,服务如何与配置文件配合. 正文 服务: public interface ISelfService { void ShowLog(); } public class SelfService : ISelfService { public ILogger<SelfService> _Logger; public SelfService(ILogger<SelfService> logger) { _Logger = logger; }…
前言 什么是结构化呢? 结构化,就是将原本没有规律的东西进行有规律话. 就比如我们学习数据结构,需要学习排序然后又要学习查询,说白了这就是一套,没有排序,谈如何查询是没有意义的,因为查询算法就是根据某种规律得到最佳的效果. 同样日志结构话,能够让我们得到一些好处.如果说容易检索,容易分析,总的来说就是让我们的日志更加有规律. 如果我们的日志结构化了,那么可以使用elasticsearch 这样的框架进行二次整理,再借助一些分析工具. 我们就能做到可视化分析系统的运行情况,做到日志告警.上下文关联…
前言 简单整理一下路由和终节点. 正文 路由方式主要有两种: 1.路由模板方式 2.RouteAttribute 方式 路由约束: 1.类型约束 2.范围约束 3.正则表达式 4.是否必选 5.自定义 IRootConstaint URL 生成 1.LinKGenerator 2.IUrlHelper 先搭建一个swagger: services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo {Title = &q…
前言 简单整理一下网关中的jwt,jwt用于授权认证的,其实关于认证授权这块https://www.cnblogs.com/aoximin/p/12268520.html 这个链接的时候就已经写了,当然只写到了4节,后面有10节没有写,是相对复杂的场景,后续会补齐. 正文 jwt 是json web tokens,是一种支持前面的数据结构. 至于什么是jwt的话,https://www.jianshu.com/p/576dbf44b2ae 这里有人写的比较好了. 然后前文也提及到为什么在网关做身…