首页 文章 精选 留言 我的

精选列表

搜索[asp],共1555篇文章
优秀的个人博客,低调大师

4.5管道实现机制和模拟构建管道「深入浅出ASP.NET Core系列」

希望给你3-5分钟的碎片化学习,可能是坐地铁、等公交,积少成多,水滴石穿,谢谢关注。 管道实现机制 要了解管道的实现机制,我们必须要深入框架的源码,幸亏微软开源了,我们可以访问GitHub的地址来下载源码。 git clone后,我们打开工程,进入Microsoft.AspNetCore.Http项目搜索ApplicationBuilder类(如下图),RequestDelegate是中间件的核心,而ApplicationBuilder是接收多个RequestDelegate的集合,所以解析ApplicationBuilder是了解整个管道实现的重要内容。而ApplicationBuilder里有两个重要的方法Build和Use也是我们关注的焦点。 Use方法 我们看下Use方法的参数是一个委托,该委托接收一个RequestDelegate参数,返回一个RequestDelegate,而_components.Add(middleware);是什么呢?我们看下这个全局变量的定义: _components就是一个IList列表容器,也就是说Use方法做的事情非常简单,就是不断的把中间件middleware往容器里面加而已,而中间件是什么?就是一个由RequestDelegate构成的委托罢了。 我们知道Use还有一个重载方法,他是一个扩展方法,可以在UseExtensions找到(如下图),这个扩展方法其实也是调用上面的Use方法,往容器添加内容。 包括Run方法和上面类似,都是往容器灌入Middleware中间件。 Build方法 Use完了之后,接下来做什么呢?我们看下Build实现代码。 这里对RequestDelegate集合进行反转,然后逐一调用执行,所以app会被最后一个执行。最后只返回一个RequestDelegate 模拟构建管道 接下来,我们来模拟管道的构建过程,我们先建两个类,一个是RequestDelegate.cs和HttpContext.cs。 HttpContext.cs我们假设没有任何实现: RequestDelegate.cs定义一个委托 因为是模拟,所以我们这里使用控制台来测试,dotnet new console --name iConsole 我们在Program.cs实现核心代码如下: using System; using System.Collections.Generic; using System.Threading.Tasks; namespace iConsole { class Program { private static readonly IList<Func<RequestDelegate, RequestDelegate>> _mycomponents = new List<Func<RequestDelegate, RequestDelegate>>(); static void Main(string[] args) { //以下是Lambada表达式的简写 Use(next => { return context => { Console.WriteLine("PipeLine 1……"); return next.Invoke(context); }; }); Use(next => { return context => { Console.WriteLine("PipeLine 2……"); return next.Invoke(context); }; }); RequestDelegate PipeLine_end = context => { Console.WriteLine("PipeLine_end……"); return Task.CompletedTask; }; foreach (var component in _mycomponents) { PipeLine_end = component(PipeLine_end); } PipeLine_end.Invoke(new HttpContext()); Console.ReadLine(); } public static void Use(Func<RequestDelegate,RequestDelegate> middleware) { _mycomponents.Add(middleware); } } } dotnet run后效果如下,整个模拟过程结束,是不是很简单呢。 以上代码大部分是截图,截图看起来更加顺眼,虽然不方便复制,如果你想看完整代码可以访问我的GitHub地址 希望以上分享对你有帮助,我是张飞洪,入行10年有余,人不堪其忧,吾不改其乐,谢谢您的关注

优秀的个人博客,低调大师

2.3Options建立配置和实体的映射「深入浅出ASP.NET Core系列」

希望给你3-5分钟的碎片化学习,可能是坐地铁、等公交,积少成多,水滴石穿,谢谢关注。 Startup.cs中创建MVC中间件 关键代码:services.AddMvc();app.UseMvcWithDefaultRoute(); 关于中间件的内部机制,后续单独专栏进行深入挖掘,此处略过。 Option在Controller里的使用 2.1HomeController里使用Option进行绑定 2.2Views的Index.cshtml Index.cshtml的智能感知有时候会莫名失效,重启一下VS就可以了。 2.3Startup.cs注册实体类 这个步骤很关键,不要遗漏 2.4运行查看效果 Option在View视图里进行绑定 如果只是在视图里使用,Controller里的依赖注入的代码就有点多余,可以删除,这里演示的是仅仅在Index.cshtml里的使用方法。为了观感,这里统一使用截图,如果要看源码,请移步:https://github.com/oncefly/aspnetcore 注释掉Controller依赖注入的代码,一样可以显示效果,如下图: 我是.NET架构师张飞洪,入行10年有余,人不堪其忧,吾不改其乐,谢谢您关注我的头条。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册