本人初接触 .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的在初始化数据的拦截处理的更多相关文章

  1. 3.使用OGG进程进行初始化数据

    开始初始化数据的时候要满足下面的条件: 1.disable掉目标段表的外键约束 2.disable掉目标端表的触发器 3.删除目标段表的索引,加快初始化速度 4.目标端表结构创建完成 源端配置初始化抽 ...

  2. EF Core利用Transaction对数据进行回滚保护

    What? 首先,说一下什么是EF Core中的Transaction Transaction允许以原子方式处理多个数据库操作,如果事务已提交,则所有操作都应用于数据库,如果事务回滚,则没有任何操作应 ...

  3. ASP.NET CORE RAZOR :初始化数据库

    官方说法是:设定数据库种子https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/razor-pages/sql 应用背景:初次部署系统时,设定一 ...

  4. C语言全局未初始化数据段分析

    前言: 在分析C语言全局未初始化变量时,发现在目标文件中全局未初始化变量并不是直接放在bss段中. 再后来发现在两个.c文件中定义同名的全局变量,链接时居然没有发生符号重定义错误.才知道C语言弱定义的 ...

  5. 在mysql数据库中创建oracle scott用户的四个表及插入初始化数据

    在mysql数据库中创建oracle scott用户的四个表及插入初始化数据 /* 功能:创建 scott 数据库中的 dept 表 */ create table dept( deptno int ...

  6. EF CodeFirst系列(9)---添加初始化数据和数据库迁移策略

    1.添加初始化数据(Seed) 我们可以在初始化数据库的过程中给数据库添加一些数据.为了实现初始化数据(seed data)我们必须创建一个自定义的数据库初始化器(DB initializer),并重 ...

  7. jquery 初始化数据 添加html 第一次玩0.0

    /** * Created by Eee_xiang on 2018/04/12. * 联动响应事件 */ (function () { $.linkEvent = function (options ...

  8. 拓展jquery js动态添加html代码 初始化数据

    1 /** * 新增数据筛选 */ (function () { $.filterEvent = function(options){ var _this = this; var defaults = ...

  9. 使用 Solr 创建 Core 并导入数据库数据

    1. 输入 http://localhost:8080/solr/index.html 来到 Solr 的管理界面: 2. 点击左侧 Core Admin --> Add Core,然后输入自己 ...

随机推荐

  1. struts2增删改查---layer---iframe层---通配符---国际化

    在前一篇文章的基础上,修改一部分即可(在此只是简单介绍) struts.xml页面 在原来的基础之上 action的name="*_*"  class="包名.{1}&q ...

  2. HTML 贝塞尔曲线

    1.二次贝塞尔曲线 <canvas id="myCanvas" width="300" height="150" style=&quo ...

  3. 升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署

    概述 容器,顾名思义是用来存放并容纳东西的器皿: 而容器技术伴着Docker的兴起也渐渐的映入大家的眼帘,它是一个抽象的概念,同时也是默默存在世上多年的技术,不仅能使应用程序间完全的隔离,而且还能在共 ...

  4. Oracle用户的初始化问题

    上一篇博文介绍了关于.bashrc和.bash_profile的相关知识,在oracle的用户设置中能发挥作用. 场景:上周准备学习一下oracle,下载了安装文件后,在linux上新建了一个用户or ...

  5. FFT 专题讲解

    FFT是什么? FFT是快速傅里叶变换(fast Fourier transform)的简称.在ACM领域主要是用来快速求解多项式乘法的算法, 在信号领域也有很大用途 基础知识 卷积 举个例子,给你两 ...

  6. 轻量级ORM框架 QX_Frame.Bantina(一、框架简介)

    轻量级ORM框架QX_Frame.Bantina系列讲解(开源) 一.框架简介 http://www.cnblogs.com/qixiaoyizhan/p/7417467.html 二.框架使用方式介 ...

  7. Run Unit API Testing Which Was Distributed To Multiple Test Agents

    Recently I am blocked by a very weird issue, from the VS installed machine, I can run performance te ...

  8. 云计算之路-阿里云上-容器难容:自建docker swarm集群遭遇无法解决的问题

    我们从今年6月开始在生产环境进行 docker 容器化部署,将已经迁移至 ASP.NET Core 的站点部署到 docker swarm 集群上.开始我们选用的阿里云容器服务,但是在使用过程中我们遭 ...

  9. awk 使用案例

    1.输出占用率超过60%的分区 df -h | awk 'BEGIN{print "Full Partition"}NR>1{gsub("%"," ...

  10. 【Js应用实例】javascript管理cookie

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...