.Net Core:Middleware中间件管道
.NetCore中的Middleware是装配到管道处理请求和响应的组件;每个组件都可以决定是否继续进入下一个管道、并且可以在进入下一个管道前后执行逻辑;
最后一个管道或者中断管道的中间件叫终端中间件;

1、创建中间件管道IApplicationBuilder
app.Run()拦截请求后中断请求,多个Run()只执行第一个;
app.Run(async httpcontenxt =>
{
httpcontenxt.Response.ContentType = "text/plain; charset=utf-8";
await httpcontenxt.Response.WriteAsync("截获请求!并在此后中断管道");
});
app.Run(async httpcontenxt =>
{
httpcontenxt.Response.ContentType = "text/plain; charset=utf-8";
await httpcontenxt.Response.WriteAsync("排序第二个的RUN");
});
2、连接下一个管道 Use()
使用next.invoke调用下一个管道,在向客户端发送响应后,不允许调用 next.Invoke,会引发异常
app.Use(async (context, next) =>
{
// 执行逻辑,但不能写Response
//调用管道中的下一个委托
await next.Invoke();
// 执行逻辑,如日志等,但不能写Response
}); app.Run(async httpcontenxt =>
{
httpcontenxt.Response.ContentType = "text/plain; charset=utf-8";
await httpcontenxt.Response.WriteAsync("截获请求!并在此后中断管道");
});
app.Run(async httpcontenxt =>
{
httpcontenxt.Response.ContentType = "text/plain; charset=utf-8";
await httpcontenxt.Response.WriteAsync("排序第二个的RUN");
});
3、通过路径或条件处理管道 Map()
public class Startup
{
private static void HandleBranch(IApplicationBuilder app)
{
app.Run(async context =>
{
var branchVer = context.Request.Query["branch"];
await context.Response.WriteAsync($"Branch used = {branchVer}");
});
} private static void HandleMapTest2(IApplicationBuilder app)
{
app.Run(async context =>
{
await context.Response.WriteAsync("Map Test 2");
});
} public void Configure(IApplicationBuilder app)
{
app.MapWhen(context => context.Request.Query.ContainsKey("branch"),
HandleBranch);//localhost:1234/?branch=master app.Map("/map2", HandleMapTest2);//localhost:1234/map2 app.Run(async context =>
{
await context.Response.WriteAsync("Hello from non-Map delegate. <p>");
});
}
}
4、中间件的顺序很重要
异常/错误处理
HTTP 严格传输安全协议
HTTPS 重定向
静态文件服务器
Cookie 策略实施
身份验证
会话
MVC
app.UseExceptionHandler("/Home/Error"); // Call first to catch exceptions
app.UseStaticFiles(); // Return static files and end pipeline.
app.UseAuthentication(); // Authenticate before you access
app.UseMvcWithDefaultRoute();
资源
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/index?view=aspnetcore-2.2
.Net Core:Middleware中间件管道的更多相关文章
- 如何传递参数给ASP.NET Core的中间件(Middleware)
问题描述 当我们在ASP.NET Core中定义和使用中间件(Middleware)的时候,有什么好的办法可以给中间件传参数吗? 解决方案 在ASP.NET Core项目中添加一个POCO类来传递参数 ...
- ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件)
ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件) Startup Class 1.Startup Constructor(构造函数) 2.Configure ...
- .net core 中间件管道底层剖析
.net core 管道(Pipeline)是什么? 由上图可以看出,.net core 管道是请求抵达服务器到响应结果返回的中间的一系列的处理过程,如果我们简化一下成下图来看的话,.net core ...
- net core 中间件管道
net core 中间件管道 .net core 管道(Pipeline)是什么? 由上图可以看出,.net core 管道是请求抵达服务器到响应结果返回的中间的一系列的处理过程,如果我们简化一下成下 ...
- .net core 2.0学习记录(四):Middleware使用以及模拟构建Middleware(RequestDelegate)管道
.net Core中没有继续沿用以前asp.net中的管道事件,而是开发了一个新的管道(Middleware): public class MiddlewareDemo { private reado ...
- Startup 和 Middleware(中间件)
Startup 和 Middleware(中间件) ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件) Startup Class 1.Startup Con ...
- ASP.NET Core Middleware 抽丝剥茧
一. 宏观概念 ASP.NET Core Middleware是在应用程序处理管道pipeline中用于处理请求和操作响应的组件. 每个组件是pipeline 中的一环. 自行决定是否将请求传递给下一 ...
- asp.net core mvc 中间件之WebpackDevMiddleware
asp.net core mvc 中间件之WebpackDevMiddleware WebpackDevMiddleware中间件主要用于开发SPA应用,启用Webpack,增强网页开发体验.好吧,你 ...
- ASP.NET Core 中的管道机制
首先,很感谢在上篇文章 C# 管道式编程 中给我有小额捐助和点赞的朋友们,感谢你们的支持与肯定.希望我的每一次分享都能让彼此获得一些收获,当然如果我有些地方叙述的不正确或不当,还请不客气的指出.好了, ...
随机推荐
- (七)Knockout 创建自定义绑定
创建自定义绑定 你可以创建自己的自定义绑定 – 没有必要非要使用内嵌的绑定(像click,value等).你可以你封装复杂的逻辑或行为,自定义很容易使用和重用的绑定.例如,你可以在form表单里自定义 ...
- tensorflow变量-【老鱼学tensorflow】
在程序中定义变量很简单,只要定义一个变量名就可以,但是tensorflow有点类似在另外一个世界,因此需要通过当前的世界中跟tensorlfow的世界中进行通讯,来告诉tensorflow的世界中定义 ...
- 初识Python,简单初学代码
第一个自己手写的代码~ If 与 Elif #!/usr/bin/env python # - * - coding:uft8 - * - Inp = input ( '请输入你的会员级别' ) if ...
- java SSM 解决跨域问题
什么是跨域 跨域是指从一个域名的网页去请求另一个域名的资源.比如从www.baidu.com 页面去请求 www.google.com 的资源.跨域的严格一点的定义是:只要 协议,域名,端口有任何一个 ...
- 获取验证码倒计时60s
倒计时函数: function time(btns) { if (wait == 0) { btns.css("background-color","#F84C02&qu ...
- Python 中的单例模式
单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...
- Cmake知识----编写CMakeLists.txt文件编译C/C++程序
1.CMake编译原理 CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多.CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt ...
- priority_queue和sort应用
#include"iostream" #include"String" #include"stdio.h" #include "s ...
- 甘特图dhtmlx Gantt入门
(以下截图来自别人的博客,来源地址已经忘记了,若后期找到会补充上来!) API地址:https://docs.dhtmlx.com/gantt/desktop__guides.html,这是英文的网页 ...
- java_基础_类加载
类加载:Java命令的作用是启动虚拟机,虚拟机通过输入流,从磁盘上将字节码文件(.class文件)中的内容读入虚拟机,并保存起来的过程就是类加载. 类加载特性 : *在虚拟机的生命周期中一个 ...