.net core的在初始化数据的拦截处理
本人初接触 .net core 如有不对的地方,请大家随时指正,共同学习。
首先说明,此案例是基于.net core1.0版本的,对于2.0好多的功能已经升级,例如:一些常用的dll已经在框架中存在,不需要自己引入等等。
首先说明一下.net core的框架原理
在说明.net core之前,我们先来回顾一下原来的,net core的机制。原来的.net 是通过管道来进行处理,如下图(盗用了网上的一张图片)
简单说明一下流程就是:(参考:http://www.cnblogs.com/fsjohnhuang/archive/2012/07/12/2587658.html#a1)
当用户发出请求的时候,Http Request传到工作进程(IIS5.x为aspnet_wp.exe,IIS6.x和IIS7.x为w3wp.exe)后,工作进程实例中通过ISAPIRuntime(主要作用是调用一些非托管代码生成HttpWorkerRequest对象,HttpWorkerRequest对象包含当前请求的所有信息,然后传递给HttpRuntime)传递HttpWorkerRequest对象给HttpRuntime并调用HttpRuntime的ProcessRequest方法,HttpRuntime为管道模型的入口此时正式进入管道模型。
HttpRuntime根据HttpWorkerRequest对象生成HttpContext,然后经过HttpApplicationFactory 生成HttpApplication,HttpApplication对象包含多个HttpModule对象(一般情况,有22个module对象,是框架自动生成的,当然你可以自己添加module来进行一些特殊情况的处理)。HttpModule是一个HTTP请求的“必经之路”,HttpModule事件的处理过程就是一个事件订阅模型,不懂这个模型的最好先了解一下。然后经过一系列处理最终返回给客户端。

下面是.net core 的处理模型,对于我个人来说,总觉得思想与管道还是有些一致的,但是对于具体的实现来说,简单了不少。在上面说过了,在.net core1.0中,基本上所有的.dll都需要用nuget自己手动的引用,就比如说连session都需要自己手动进行引用,其他的就更不用说了。
首先看一下 .net core生成的项目的模样

通过上图,我们能够看到,原来的引用变成了现在的依赖项,.net core其中很大的改变就是将所有的引用都是通过反射的形式获取加载的。还有一个地方就是,之前的web.config这种类型的文件已经不存在了,全都都是利用.json格式的文件存储的。
下面,就开始说明拦击的处理了:在此,说明一下,这里的处理基本上都是相对于全局的处理。
在此说明一下.net core与.net 的不同之处,上面简单介绍了管道处理模型,在.net core中已经不存在管道处理模型了,所有的处理都是通过中间件(Middleware)来进行处理的

上面的代码,是我新建的一个中间件,这个类中,必须要实现一个带有RequestDelegate的构造函数,还有实现 public async Task Invoke(HttpContext httpContext)方法。在这里,说明一下代码的逻辑,如果地址为”/middleware“,则直接返回,否则继续下一个
首先,我们找到StartUp文件,在里面可以找到Configure()方法,我们接下来说的东西,都是在这个方法里发生的,首先说明一下 app.UseMvc是这里的事件终结者。
在这里添加处理的方法有三种 app.run(), app.Use(),app.Map()/app.MapWhen()
在这里我们是新建的类,所以通过use来实现的。
调用如下:

下面运行代码,看看效果
正常访问

访问/home/index

访问/middleware

以上就是效果,同个这个个例,可以扩展实现很多的效果,例如写日志啊,语言环境的配置啊,等等。
.net core的在初始化数据的拦截处理的更多相关文章
- 3.使用OGG进程进行初始化数据
开始初始化数据的时候要满足下面的条件: 1.disable掉目标段表的外键约束 2.disable掉目标端表的触发器 3.删除目标段表的索引,加快初始化速度 4.目标端表结构创建完成 源端配置初始化抽 ...
- EF Core利用Transaction对数据进行回滚保护
What? 首先,说一下什么是EF Core中的Transaction Transaction允许以原子方式处理多个数据库操作,如果事务已提交,则所有操作都应用于数据库,如果事务回滚,则没有任何操作应 ...
- ASP.NET CORE RAZOR :初始化数据库
官方说法是:设定数据库种子https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/razor-pages/sql 应用背景:初次部署系统时,设定一 ...
- C语言全局未初始化数据段分析
前言: 在分析C语言全局未初始化变量时,发现在目标文件中全局未初始化变量并不是直接放在bss段中. 再后来发现在两个.c文件中定义同名的全局变量,链接时居然没有发生符号重定义错误.才知道C语言弱定义的 ...
- 在mysql数据库中创建oracle scott用户的四个表及插入初始化数据
在mysql数据库中创建oracle scott用户的四个表及插入初始化数据 /* 功能:创建 scott 数据库中的 dept 表 */ create table dept( deptno int ...
- EF CodeFirst系列(9)---添加初始化数据和数据库迁移策略
1.添加初始化数据(Seed) 我们可以在初始化数据库的过程中给数据库添加一些数据.为了实现初始化数据(seed data)我们必须创建一个自定义的数据库初始化器(DB initializer),并重 ...
- jquery 初始化数据 添加html 第一次玩0.0
/** * Created by Eee_xiang on 2018/04/12. * 联动响应事件 */ (function () { $.linkEvent = function (options ...
- 拓展jquery js动态添加html代码 初始化数据
1 /** * 新增数据筛选 */ (function () { $.filterEvent = function(options){ var _this = this; var defaults = ...
- 使用 Solr 创建 Core 并导入数据库数据
1. 输入 http://localhost:8080/solr/index.html 来到 Solr 的管理界面: 2. 点击左侧 Core Admin --> Add Core,然后输入自己 ...
随机推荐
- python扫描proxy并获取可用代理ip
今天咱写一个挺实用的工具,就是扫描并获取可用的proxy 首先呢,我先百度找了一个网站:http://www.xicidaili.com 作为例子 这个网站里公布了许多的国内外可用的代理的ip和端口 ...
- js复习---string
对js的string的方法复习: 1.charCodeAt() 返回一个整数,代表指定位置字符串的unicode编码. strObj.charCodeAt(index) index 是处理字符的从零 ...
- Linux下SVN配置
1.安装svnyum install subversion 2.创建版本库fengyu(版本库的名字取来和你web项目的名字相同,否则你在服务器检出后会变成web项目里还有一层版本库的目录,里面才是项 ...
- pentaho专题系列之kettle篇--kettle源码编译
最近看了一些kettle的文章,都是kettle7.0以前的,已经跟不上时代了.截止笔者写这篇文章的时候,github上面的已经是7.1.0.3了,而且是发行版的,最新的快照版本已经是8.0的了.基于 ...
- 隐马尔可夫模型(HMM)
隐马尔可夫模型 (Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些学者发表在一系列的统计学论文中,随后在语言识别,自然语言处理以及生物信息等领域体现了很大的价 ...
- 你不可错过的二维码生成与解析-java后台与前端js都有
1.二维码分类 二维条码也有许多不同的码制,就码制的编码原理而言,通常分为三种类型. 线性堆叠式二维码 编码原理: 建立在一维条码基础之上,按需要堆积成两行或多行. 图示: 矩阵式二维码 最常用编 ...
- python 项目中的 requirements.txt
背景 java项目的话,包依赖一般都是maven管理,当然还有gradle,对于包的管理非常方便,maven的话只要在pom.xml中添加依赖包的maven坐标就可以了的,那python呢 ? 解决方 ...
- 【Eclipse】给web项目打war包
项目右键->export->war file -> Destination ->finish 第二步 保存
- 实操代码研究各种Java技术-java.toutiao.im
whatsmars https://github.com/javahongxi/whatsmars whatsmars-earth-web springmvc+velocitywhatsmars-ea ...
- 如何编写更好的SQL查询:终极指南-第一部分
结构化查询语言(SQL)是数据挖掘分析行业不可或缺的一项技能,总的来说,学习这个技能是比较容易的.对于SQL来说,编写查询语句只是第一步,确保查询语句高效并且适合于你的数据库操作工作,才是最重要的.这 ...