日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

[转]c# 中间件 的扩展模型(.net webapi/.net Core 的 MiddleWare 处理模型)

發布時間:2023/12/4 C# 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]c# 中间件 的扩展模型(.net webapi/.net Core 的 MiddleWare 处理模型) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在學習 asp.net WebApi 或者asp.net Core 的時候,它們管道的處理模型跟 asp.net MVC/WebForm 的管道模型是不一樣的。

asp.net WebApi 或者asp.net Core?他們使用了一種叫做“中間件”的處理模型,相對于傳統管道模型,剔除了很多非必要的處理,擴展行增強,根據需求進行各種拓展,有類似裝飾器、aop的效果。

然后筆者就想看著這樣的一種模型我們是不是也可以設計出來呢,知道今天 才有時間鼓搗一下,實現了一個簡單的 模型。代碼量很少。

這里是仿 asp.net Core 的中間件寫的一個中間件模型。直接給出代碼如下:

?

中間件模型

public class MiddleWare<T> {public List<Func<T, Func<Task>, Task>> MiddleWares = null;public MiddleWare(){MiddleWares = new List<Func<T, Func<Task>, Task>>();}public void Add(Func<T, Func<Task>, Task> middleWare){MiddleWares.Add(middleWare);}public async Task Execute(T t){//列表數據倒序,從最后一個注冊的func一層一層往上包MiddleWares.Reverse();await MiddleWares[MiddleWares.Count - 1].Invoke(t, Execute(t,-1, MiddleWares.Count - 2, null));}private Func<Task> Execute(T t,int index ,int count,Func<Task> func){if(index< count){return Execute(t,++index,count, async () => await MiddleWares[index].Invoke(t, func));}return func;} }

這個模型就一個類,很簡單,就是 接收 func 存到列表,然后倒序對 func包裝,最后執行。

測試的代碼如下:

? class Program {static void Main(string[] args){MiddleWare<string> middleWare = new MiddleWare<string>();middleWare.Add(async (s, next) =>{Console.WriteLine("---------------異常處理層");try{await next.Invoke();}catch (Exception ex){Console.WriteLine($"----------異常:{ex.Message}\r\n{ex.StackTrace}");}Console.WriteLine("---------------異常處理層");});middleWare.Add(async (s, next) =>{Console.WriteLine("中間件第一層---開始");await next.Invoke();Console.WriteLine("中間件第一層---結束");});middleWare.Add(async (s, next) =>{Console.WriteLine(" 中間件第二層---開始");await next.Invoke();Console.WriteLine(" 中間件第二層---結束");});middleWare.Add(async (s, next) =>{Console.WriteLine(" 中間件第三層---開始");await next.Invoke();Console.WriteLine(" 中間件第三層---結束");});middleWare.Add(async (s, next) =>{await Task.Run(() => { Console.WriteLine(" 中間件第四層---開始"); });await next.Invoke();await Task.Run(() => { Console.WriteLine(" 中間件第四層---結束"); });});middleWare.Add(async (s, next) =>{await Task.Run(() => { Console.WriteLine($"核心部分------輸入的內容是:{s}"); });});Task.WaitAll(middleWare.Execute("哈哈哈哈哈"));Console.ReadLine();} }


效果如圖所示:

?


---------------------
作者:mengtoumingren
來源:CSDN
原文:https://blog.csdn.net/mengtoumingren/article/details/78063718
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!
內容解析By:CSDN,CNBLOG博客文章一鍵轉載插件

總結

以上是生活随笔為你收集整理的[转]c# 中间件 的扩展模型(.net webapi/.net Core 的 MiddleWare 处理模型)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。