c# Middleware impl
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Pactera.Bpm.TestProject.MiddlewareTest
{
[TestFixture]
public class TestMiddleware
{
[Test]
public void TestMiddlewareImpl()
{
var context = new HttpContext();
var builder = new AppBuilder();
builder.Use(next =>
{
return (ctx) =>
{
ctx.AddMessage("m1 invoke");
next(ctx);
};
});
builder.Use(next =>
{
return (ctx) =>
{
ctx.AddMessage("m2 invoke");
next(ctx);
};
});
//app.Use((ctx, next) =>
//{
// Console.WriteLine("m3 message:{0}", ctx.Message);
// ctx.Message = "Change by m3";
// next(ctx);
//});
var app = builder.Build();
app(context);
context.DisplayMessage();
}
}
public class HttpContext
{
private IList<string> _message = new List<string>();
public void AddMessage(string message)
{
_message.Add(message);
}
public void DisplayMessage()
{
foreach (var msg in _message)
{
Console.WriteLine(msg);
}
}
}
public delegate void HttpRequestTask(HttpContext context);
public class AppBuilder
{
private IList<Func<HttpRequestTask, HttpRequestTask>> middlewares = new List<Func<HttpRequestTask, HttpRequestTask>>();
public void Use(Func<HttpRequestTask, HttpRequestTask> middleware)
{
middlewares.Add(middleware);
}
//public void Use(Action<CustomeHttpContext, HttpTask> middleware)
//{
// var context = new CustomeHttpContext() { Message = "inner context" };
// middlewares.Add((ctx) =>
// {
// middleware(context, HandleRequest);
// return HandleRequest;
// });
//}
public void Run(Action<HttpContext> middleware)
{
//var context = new HttpContext() { Message = "inner context" };
//middleware(context);
}
public HttpRequestTask Build()
{
HttpRequestTask next = (ctx) =>
{
ctx.AddMessage("Start app 404");
};
var newmiddlewares = middlewares.Reverse<Func<HttpRequestTask, HttpRequestTask>>();
foreach (var middleware in newmiddlewares)
{
next = middleware(next);
}
return next;
}
}
}
c# Middleware impl的更多相关文章
- Python实现各类验证码识别
项目地址: https://github.com/kerlomz/captcha_trainer 编译版下载地址: https://github.com/kerlomz/captcha_trainer ...
- 用Middleware给ASP.NET Core Web API添加自己的授权验证
Web API,是一个能让前后端分离.解放前后端生产力的好东西.不过大部分公司应该都没能做到完全的前后端分离.API的实现方式有很 多,可以用ASP.NET Core.也可以用ASP.NET Web ...
- [转]Writing Custom Middleware in ASP.NET Core 1.0
本文转自:https://www.exceptionnotfound.net/writing-custom-middleware-in-asp-net-core-1-0/ One of the new ...
- [转]用Middleware给ASP.NET Core Web API添加自己的授权验证
本文转自:http://www.cnblogs.com/catcher1994/p/6021046.html Web API,是一个能让前后端分离.解放前后端生产力的好东西.不过大部分公司应该都没能做 ...
- Spring + SpringMVC + Druid + JPA(Hibernate impl) 给你一个稳妥的后端解决方案
最近手头的工作不太繁重,自己试着倒腾了一套用开源框架组建的 JavaWeb 后端解决方案. 感觉还不错的样子,但实践和项目实战还是有很大的落差,这里只做抛砖引玉之用. 项目 git 地址:https: ...
- [译]Writing Custom Middleware in ASP.NET Core 1.0
原文: https://www.exceptionnotfound.net/writing-custom-middleware-in-asp-net-core-1-0/ Middleware是ASP. ...
- 爬虫 htmlUnit遇到Cannot locate declared field class org.apache.http.impl.client.HttpClientBuilder.dnsResolve错误
当在使用htmlUnit时遇到无法定位org.apache.http.impl.client.HttpClientBuilder.dnsResolver类时,此时所需要的依赖包为: <depen ...
- 如何在android studio 1.0 启动时设置代理【解决WARN - ateSettings.impl.UpdateChecker - Connection failed.】
今天第一次用android studio,下了个比较新的1.0.1 linux版本,结果启动时老是出现以下错误: [ 6987] WARN - ateSettings.impl.UpdateCheck ...
- 使用静态函数impl模式做接口
使用静态函数impl模式做接口 impl即桥接模式,主要是为了隐藏数据和减少不必要的编译. 普通的impl模式做接口一般是: A类是接口,B类继承A类,是A类的实现,C类,包含A类和B类的头文件,把B ...
随机推荐
- iOS开发debug集锦
1.添加第三方库时,需要注意使用环境 duplicate symbol _llvm.embedded.module in: /Users/dengw/360Cloud/xcode_code/appli ...
- git 常用命令行操作
git常用命令行操作: 点击 git bash 进入到命令行: git clone https://github.com/wlz1244/qingoo.git //下载一个master分支代码 g ...
- Zookeeper环境安装
源码包下载: http://archive.apache.org/dist/zookeeper/zookeeper-3.4.10 集群环境: master 192.168.1.99 slave1 19 ...
- $ 一步一步学Matlab(2)——Matlab基本通用操作
在上一篇中对Matlab做了一个初步的了解,本文继续来零距离亲身体验Matlab,来感受一下Matlab的一些基本.通用的操作. 命令行窗口 一打开Matlab就能看到命令行窗口,在我所用的这个精简版 ...
- iOS开发之JSONKit
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...
- Ubuntu16.04中用et对jmeter生成的数据统计成图表
在Ubuntu系统中,用ctrl+Alt+t 打开终端: 输入et,即打开wps: 整理需要形成图表的数据,如: 用excel生成图表,如下: 表得出的性能图表,方法: 1.工具栏中选择插入——二维折 ...
- python3_time模块详解
python提供的时间模块time是需要单独引入: 1.time.sleep(secs)# 推迟调用线程的运行,secs指的是秒 time.sleep(secs) 2.time.time():返回当前 ...
- linux go with vscode
1 install go apt install golang 将会同时安装下列软件: golang-1.9 golang-1.9-doc golang-1.9-go golang-1.9-src ...
- LabVIEW之Vision基础 (一)之软件
一.软件准备 NI LabVIEW软件视觉开发必备软件 1.开发平台:LabVIEW 2015Chinese 32位中文版 链接:http://pan.baidu.com/s/1eRGmFVc 2.N ...
- Elasticsearch之IKAnalyzer的过滤停止词
它在哪里呢? 非常重要! [hadoop@HadoopMaster custom]$ pwd/home/hadoop/app/elasticsearch-2.4.3/plugins/ik/config ...