目录:

  1. 什么是中间件(IApplicationBuilder)
  2. 创建
  3. 顺序规则
  4. Asp.Net Core 内置的中间件

1.什么是中间件

官方:中间件是组装成应用程序管道以处理请求和响应的软件。每个组件选择是否将请求传递给流水线中的下一个组件,并且可以在管道中调用下一个组件之前和之后执行某些操作。请求代理用于构建请求管道。请求委托处理每个HTTP请求。

个人:对Http请求进行操作的逻辑块。逻辑块可以调用另外一个,也可以马上中断返回。

   2.创建中间件

创建中间件主要的操作函数:Run,Use,Map

Run:终止管道,返回response之前的一次逻辑操作

Use:逻辑操作,可以调用下一个中间件

Map: 根据地址的不同,操作不同的逻辑

注意点:如果在use中 调用下一个中间件,而这个中间是run,并且,在run后面还有中间件,那么use的所有逻辑都会处理完,而不是直接中断返回

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.Use(async (context, next) =>
{
await context.Response.WriteAsync("use1 ");
await next();
await context.Response.WriteAsync(" use2");
}); app.Run(async context =>
{
await context.Response.WriteAsync("run ");
});
}

Map:

public class Startup
{
private static void HandleMapTest1(IApplicationBuilder app)
{
app.Run(async context =>
{
await context.Response.WriteAsync("Map Test 1");
});
} private static void HandleMapTest2(IApplicationBuilder app)
{
app.Run(async context =>
{
await context.Response.WriteAsync("Map Test 2");
});
} public void Configure(IApplicationBuilder app)
{
app.Map("/map1", HandleMapTest1); app.Map("/map2", HandleMapTest2); app.Run(async context =>
{
await context.Response.WriteAsync("Hello from non-Map delegate. <p>");
});
}
}

 3.顺序规则

添加中间件的顺序就是在请求上调用它们的顺序,此排序对于安全性,性能和功能至关重要。下面直接搬运

配置方法(如下所示)添加了以下中间件组件:

  1. 异常/错误处理
  2. 静态文件服务器
  3. 认证
  4. MVC
        public void Configure(IApplicationBuilder app)
{
app.UseExceptionHandler("/Home/Error"); // Call first to catch exceptions
// thrown in the following middleware. app.UseStaticFiles(); // Return static files and end pipeline. app.UseIdentity(); // Authenticate before you access
// secure resources. app.UseMvcWithDefaultRoute(); // Add MVC to the request pipeline.
}

在上面的代码中,UseExceptionHandler是添加到管道中的第一个中间件组件,因此它捕获在以后的调用中发生的任何异常。静态文件中间件在管道中提前调用,因此可以处理请求和短路,而无需通过剩余的组件。静态文件中间件提供没有授权检查。由其提供的任何文件,包括wwwroot下的文件都是公开的。如果请求不由静态文件中间件处理,则将其传递给执行身份验证的Identity中间件(app.UseIdentity)。身份不会使未经身份验证的请求发生短路。虽然身份认证请求,但授权(和拒绝)仅在MVC选择特定控制器和操作之后才会发生

4.内置中间件

十二个 ASP.NET Core 例子——中间件的更多相关文章

  1. 十二个 ASP.NET Core 例子

    原文地址:http://piotrgankiewicz.com/2017/04/17/asp-net-core-12-samples/ 作者:Piotr Gankiewicz 翻译:杨晓东(Savor ...

  2. 十二个 ASP.NET Core 例子——过滤器

    目录: 过滤器介绍 过滤器类别 自定义过滤器和过滤特性 直接短路返回内容 过滤器与中间件的区别 如果要全局日志,不要用过滤器 官方文档传送门 1.过滤器介绍 没有权限直接返回,资源缓存,Action执 ...

  3. 十二个 ASP.NET Core 例子——1.1版本 EF MySql快速搭建

    core1.0的时候搭建过一次mysql EF. 一大推问题.最近在core1.1 又重新搭了一次.简单搭建还挺快,没出现什么幺蛾子.总结下步骤 建立项目,例如ASP.NET Core1.1 WebA ...

  4. 十二个 ASP.NET Core 例子——IOC

    目录 简单介绍 core自带IOC的实现解释 1.简单介绍 (个人理解) 是什么:IOC是一种设计原则,而非设计模式,是对流程控制,当你注入你需要的定制化类时,流程就确定了 怎么用:和IOC容器说你这 ...

  5. 十二个 ASP.NET Core 例子——配置操作

    目录: 简单配置(利用configration 键值读取) 使用选项和配置对象(自定义类绑定配置文件实现读取) IOptionsSnapshot(配置文件更改时也变化) 内存数据放到配置对象中 实体框 ...

  6. ASP.NET Core:中间件

    一.什么是中间件 我们都知道,任何的一个web框架都是把http请求封装成一个管道,每一次的请求都是经过管道的一系列操作,最终才会到达我们写的代码中.而中间件就是用于组成应用程序管道来处理请求和响应的 ...

  7. ASP.NET Core路由中间件[3]: 终结点(Endpoint)

    到目前为止,ASP.NET Core提供了两种不同的路由解决方案.传统的路由系统以IRouter对象为核心,我们姑且将其称为IRouter路由.本章介绍的是最早发布于ASP.NET Core 2.2中 ...

  8. ASP.NET Core路由中间件[2]: 路由模式

    一个Web应用本质上体现为一组终结点的集合.终结点则体现为一个暴露在网络中可供外界采用HTTP协议调用的服务,路由的作用就是建立一个请求URL模式与对应终结点之间的映射关系.借助这个映射关系,客户端可 ...

  9. 如何传递参数给ASP.NET Core的中间件(Middleware)

    问题描述 当我们在ASP.NET Core中定义和使用中间件(Middleware)的时候,有什么好的办法可以给中间件传参数吗? 解决方案 在ASP.NET Core项目中添加一个POCO类来传递参数 ...

随机推荐

  1. MySQL5.6中date和string的转换和比较

    Conversion & Comparison, involving strings and dates in MySQL 5.6 我们有张表,表中有一个字段dpt_date,SQL类型为da ...

  2. java调优(一)

  3. 万能选项卡,tab选项卡

    //万能选项卡 function PaPtabs(thisObj, num) { if (thisObj.className == "active") return; var ta ...

  4. detach() 与remove()

    detach() 与remove()区别,在于remove()掉后,就没有啦,添加的事件也没有啦,后者还有啊,可以保留的哦,虽然 $("div").click(function() ...

  5. linux 下安装 sphinx 服务器

    准备工作:安装需要的扩展文件 yum install make gcc g++ gcc-c++ libtool autoconf automake imake libxml2-devel expat- ...

  6. jQuery基础 (四)——使用jquery-cookie 实现点赞功能

    jquery-cookie 下载地址:https://github.com/carhartl/jquery-cookie 直接上代码 html <span class="jieda-z ...

  7. ubuntu16.04安装flash player与谷歌浏览器(chrome)

    一,安装 adobe flash player sudo apt-get upgradesudo apt-get install flashplugin-installer 二,安装chrome浏览器 ...

  8. [js高手之路]寄生组合式继承的优势

    在之前javascript面向对象系列的文章里面,我们已经探讨了组合继承和寄生继承,回顾下组合继承: function Person( uName ){ this.skills = [ 'php', ...

  9. Vuejs实现列表选中效果

    //html <div id="app"> <ul><div>选择你最喜欢的爱好:</div> <li class=" ...

  10. angular4.0项目main.ts详解

    main.ts负责引导整个angular应用的起点 // 导入enableProdMode用来关闭angular开发者模式 import { enableProdMode } from '@angul ...