中间件是用于组成应用程序管道来处理请求和响应的组件。管道内的每个组件都可以选择是否将请求交给下一个组件,并在管道中调用下一个组件之前和之后执行一些操作。

请求委托被用来建立请求管道,并处理每一个HTTP请求。

管道中的中间件的处理逻辑类似于责任链的处理,当前中间件能够处理的话就处理,不能处理就交给下一个进行处理。

管道中间件的设定是在Startup类中的Configure函数中设置,根据每个中间件在代码中的前后位置来设定其触发的顺序。

中间件的顺序通常会影响到请求处理的顺序,因此,对程序的性能、功能和安全都方面都很关键,需要仔细的进行配置。

每个管道中间件的处理逻辑中,都可以使用next属性来获取下一个管道中间件委托。

HTTP请求管道中间件的配置有以下三种方式

  • Run

    使用该方法将短路管道,不会再调用下一个管道中间件。因此,该方法只能在管道尾部被调用。
  • Use

    使用该方法向管道中添加中间件,添加顺序即为中间件处理请求的顺序。每个中间件中处理逻辑中可以使用next来获取下一个中间件的委托。
  • Map

    使用该方法用于匹配基于请求路径的请求委托。Map方法只接受路径,并配置单独的中间件管道的功能。即任何基于该路径的请求都会被该中间件所处理。

    ASP.NET Core中内置的中间件包括以下几种:
  • 身份验证Authentication

    需要添加Microsoft.AspNetCore.Identity的程序集引用

后续学习后再添加学习记录

  • 跨域资源共享CORS

    需要添加Microsoft.AspNetCore.Cors的程序集引用
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
}
public void Configure(IApplicationBuilder app)
{
app.UseCors(builder => builder.WithOrigins("http://example.com"));
}
  • 路由Routing

    需要添加Microsoft.AspNetCore.Routing的程序集引用
后续学习后再添加学习记录
  • 回话Session

    需要添加 Microsoft.AspNetCore.Session的程序集引用
public void ConfigureServices(IServiceCollection services)
{
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
// Set a short timeout for easy testing.
options.IdleTimeout = TimeSpan.FromSeconds(10);
options.Cookie.HttpOnly = true;
});
}
public void Configure(IApplicationBuilder app)
{
app.UseSession();
}
  • 静态文件

    需要添加Microsoft.AspNetCore.All metapackage的程序集引用
public void Configure(IApplicationBuilder app)
{
app.UseStaticFiles();
}

DotNetCore学习-3.管道中间件的更多相关文章

  1. Core 1.0中的管道-中间件模式

    ASP.NET Core 1.0中的管道-中间件模式 SP.NET Core 1.0借鉴了Katana项目的管道设计(Pipeline).日志记录.用户认证.MVC等模块都以中间件(Middlewar ...

  2. (学习笔记)laravel 中间件

    (学习笔记)laravel 中间件 laravel的请求在进入逻辑处理之前会通过http中间件进行处理. 也就是说http请求的逻辑是这样的: 建立中间件 首先,通过Artisan命令建立一个中间件. ...

  3. ASP.NET Core 1.0中的管道-中间件模式

    ASP.NET Core 1.0借鉴了Katana项目的管道设计(Pipeline).日志记录.用户认证.MVC等模块都以中间件(Middleware)的方式注册在管道中.显而易见这样的设计非常松耦合 ...

  4. Ocelot自定义管道中间件

    Ocelot是啥就不介绍了哈,网关大家都知道,如果大家看过源码会发现其核心就是由一个个的管道中间件组成的,当然这也是Net Core的亮点之一.一个请求到来,会按照中间件的注册顺序进行处理,今天的问题 ...

  5. .NET Core基础篇之:白话管道中间件

    在.Net Core中,管道往往伴随着请求一起出现.客户端发起Http请求,服务端去响应这个请求,之间的过程都在管道内进行. 举一个生活中比较常见的例子:旅游景区. 我们都知道,有些景区大门离景区很远 ...

  6. Asp.Net Core基础篇之:白话管道中间件

    在Asp.Net Core中,管道往往伴随着请求一起出现.客户端发起Http请求,服务端去响应这个请求,之间的过程都在管道内进行. 举一个生活中比较常见的例子:旅游景区. 我们都知道,有些景区大门离景 ...

  7. DotNETCore 学习笔记 Startup、中间件、静态文件

    Application Startup Startup Constructor - IHostingEnvironment - ILoggerFactory ConfigureServices - I ...

  8. Egg入门学习(三)---理解中间件作用

    Egg是基于koa的,因此Egg的中间件和Koa的中间件是类似的.都是基于洋葱圈模型的. 在Egg中,比如我想禁用某些IP地址来访问我们的网页的时候,在egg.js中我们可以使用中间件来实现这个功能, ...

  9. Asp .Net core 2 学习笔记(2) —— 中间件

    这个系列的初衷是便于自己总结与回顾,把笔记本上面的东西转移到这里,态度不由得谨慎许多,下面是我参考的资源: ASP.NET Core 中文文档目录 官方文档 记在这里的东西我会不断的完善丰满,对于文章 ...

随机推荐

  1. ABP框架系列之四十三:(OData-Integration-OData集成)

    Introduction OData is defined as "An open protocol to allow the creation and consumption of que ...

  2. Centos7部署Kubernetes集群

    目录贴:Kubernetes学习系列 1.环境介绍及准备: 1.1 物理机操作系统 物理机操作系统采用Centos7.3 64位,细节如下. [root@localhost ~]# uname -a ...

  3. Solutions and Summay for Linked List Naive and Easy Questions

    1.Remove Linked List Elements package linkedlist; /* * Question: Remove all elements from a linked l ...

  4. Internetworking

    1 Introduction 所谓的InternetWorking就是将很多网络连接起来,那么在这种连接的网络下我们该如何传送封包呢? 2 IP and Routers 1 IP Datagram H ...

  5. SQL Server PageIOLatch和PageLatch

    Latch是轻量级的锁,它是SQL Server内部用来同步资源访问的一个数据结构,使数据的访问同步有序,这意味着,当一个线程获得资源R的Latch的独占使用权时,如果其他的线程也想访问这个Latch ...

  6. xampp/apache启动失败解决方法

    我的问题是: 9:15:53 AM  [Apache] Error: Apache shutdown unexpectedly.9:15:53 AM  [Apache] This may be due ...

  7. HTTP 协议支持的十种方法

    GET 获取资源,用来请求访问已被URI识别的资源. POST 传输实体主体. PUT 传输文件,(鉴于HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传文件,存在安全性问题,因此一般We ...

  8. web API简介(四):客户端储存之IndexedDB API

    概述 前篇:web API简介(三):客户端储存之Web Storage API 客户端储存从某一方面来说和动态网站差不多.动态网站是用服务端来储存数据,而客户端储存是用客户端来储存数据. Index ...

  9. docker配置仓储库时出错:无法安全地用该源进行更新,所以默认禁用该源

    在Ubuntu上安装docker,配置仓储库时第一次使用了阿里去的镜像,如下 sudo add-apt-repository "deb [arch=amd64] http://mirrors ...

  10. Xamarin.Android 获取手机IP地址

    命名空间: using System.Net; 代码: IPAddress[] address = Dns.GetHostAddresses(Dns.GetHostName()); ] != null ...