原文: Adding validation to strongly typed configuration objects in ASP.NET Core 作者: Andrew Lock 译文: Lamond Lu 本篇博客中,我将描述如何在ASP.NET Core程序启动时,确保强类型配置对象正确的绑定成功.通过使用IStartupFilter接口对象,你可以更早的验证你的配置对象是否绑定了正确的值,并不需要等待程序启动之后的某个时间点再验证. 这里我将简单描述一下ASP.NET Core的配…
HttpContext简介 .Net Core中的HttpContext上下文是个抽象类,命名空间为Microsoft.AspNetCore.Http 所在程序集 \netstandard2.0\Microsoft.AspNetCore.Http.Abstractions.dll 定义代码: namespace Microsoft.AspNetCore.Http { // // 摘要: // Encapsulates all HTTP-specific information about an…
百度到的基本上就是读取response.body的流.然后记录完了之后,把流的index重新复位,这样也太麻烦了. 其实asp.net core团队肯定已经考虑到了这种需求,比如记录请求响应日志.给响应数据过滤这类的. 在OnActionExecuted的ActionExecutedContext里面有个result.在调试模式下,就可以看到这个Result随着响应对象的不一致,是不同的对象 if (context.Result is JsonResult) { var value = ((Js…
负责管理 HTTP 请求上下文的 HttpContext 对象有一个名为 RequestAborted 的属性.据其名思其义,就是可用来表示客户端请求是否已取消. 果然,它的类型是 CancellationToken,这家伙是结构类型,为啥强调是结构呢--因为是值类型啊.在访问 HTTP 的整个上下文传递过程,直接赋值会复制多个实例,弄不好就会搞得一个请求通信期间状态数据不一致.所以,类库内部在传递此属性值时会用 object 类型的变量来引用它的值,嗯,对的,就是"装箱".以引用类型…
前言 对象池是一种设计模式,一个对象池包含一组已经初始化过且可以使用的对象,而可以在有需求时创建和销毁对象.池的对象可以从池中取得对象,对其进行操作处理,并在不需要时归还给池子而非直接销毁他,他是一种特殊的工厂对象. 若初始化.实例化的代价高,且有需求需要经常实例化,但每次实例化的数量较小的情况下,使用对象池可以过得显著的性能提升.从池子中取得对象的时间是可测的,但新建一个实际所需要的时间是不确定的. 对象池的优势 说到池我们就会联想到很多的概念,如线程池.数据库连接池.内存池等等在多线程设计中…
前言 上一篇文章主要介绍了ObjectPool的理论知识,再来介绍一下Microsoft.Extensions.ObjectPool是如何实现的. 核心组件 ObjectPool ObjectPool是一个泛型抽象接口,他抽象了两个方法Get和Return Get方法用于从对象池获取到可用对象,如果对象不可用则创建对象并返回出来 Return方法用户将对象返回到对象池 /// <summary> /// A pool of objects. /// </summary> /// &…
using Microsoft.AspNetCore.Http; using Newtonsoft.Json; public static class SessionExtensions { public static void Set<T>(this ISession session, string key, T value) { session.SetString(key, JsonConvert.SerializeObject(value)); } public static T Get…
asp.net core 自定义异常处理中间件 Intro 在 asp.net core 中全局异常处理,有时候可能不能满足我们的需要,可能就需要自己自定义一个中间件处理了,最近遇到一个问题,有一些异常,不希望记录错误日志,目前主要是用户请求取消导致的 TaskCanceledException 和 OperationCanceledException 异常.因为我的 ERROR 级别的日志会输出到 Sentry,sentry的异常会自动发邮件提醒,如果是一些没必要的错误,自然不需要记录错误日志…
原文:Running async tasks on app startup in ASP.NET Core (Part 1) 作者:Andrew Lock 译者:Lamond Lu 背景 当我们做项目的时候,有时候希望自己的ASP.NET Core应用在启动前执行一些初始化逻辑.例如,你希望验证配置是否合法,填充缓存数据,或者运行数据库迁移脚本.在本篇博客中,我将介绍几种可选的方案,并且通过展示一些简单的方法和扩展点来说明我想要解决的问题. 开始我将先描述一下ASP.NET Core内置的解决方…
本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard 2.0类库转换为.NET Core 3.0类库 Part 2 - IHostingEnvironment VS IHostEnvironent - .NET Core 3.0中的废弃类型 Part 3 - 避免在ASP.NET Core 3.0中为启动类注入服务(本篇) Part 4 - 将终端中间件转换为ASP.NET Core 3.0中的端点路由 Part 5 - 将集成测试的…