asp.net core中寫入自定義中間件

来源:https://www.cnblogs.com/zhiyong-ITNote/archive/2018/04/06/8726974.html
-Advertisement-
Play Games

首先要明確什麼是中間件?微軟官方解釋:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?tabs=aspnetcore2x 也就是中,我們需要在整個應用程式的請求管道中註入某一個中間層來做我們想做的事情。談談我 ...


首先要明確什麼是中間件?微軟官方解釋:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?tabs=aspnetcore2x

也就是中,我們需要在整個應用程式的請求管道中註入某一個中間層來做我們想做的事情。談談我的理解:
就拿asp.net 的管道模型來說,以往的.net請求管道中我們知道有21個(應該不止)事件來分別處理相應的模塊,這是微軟為我們設計好的,如果我們需要拓展出來什麼,在相應的事件中寫入註冊就可以了。但是現在的軟體設計模型逐漸的加入了一層---中間件,在整個的應用程式請求管道,我們不做任何的事件封裝,而是開放出來,由程式猿自己在某個應用程式的某個部分寫入自己需要註入的,而且可以註入多個,但是順序什麼的就是由自己定義了。
那麼我們就需要基於IApplicationBuilder來構建我們的中間件。在哪個方法裡面調用呢?那必須是Configure方法。根據微軟官方的解釋:Configure 方法用於指定如何響應HTTP 請求。在這裡我們需要使用微軟的UseMiddleware<T> 拓展方法來構建我們的中間件(每個Use擴展方法將中間件組件添加到請求管道)。我們將中間件封裝在類中,並且通過擴展方法公開。封裝如下:

public class RequestCultureMiddleware
    {
        private readonly RequestDelegate _next;

        public RequestCultureMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        public Task InvokeAsync(HttpContext context)
        {
            var cultureQuery = context.Request.Query["culture"];
            if (!string.IsNullOrWhiteSpace(cultureQuery))
            {
                var culture = new CultureInfo(cultureQuery);

                CultureInfo.CurrentCulture = culture;
                CultureInfo.CurrentUICulture = culture;

            }

            // Call the next delegate/middleware in the pipeline
            return _next(context);
        }

    }

接著我們基於IApplicationBuilder介面拓展我們的中間件。通過UseMiddleware 來使用中間件。

public static class RequestCultureMiddlewareExtensions
    {
        public static IApplicationBuilder UseRquestCulture(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<RequestCultureMiddleware>();
        }
    }

最後我們在Configure中使用我們的中間件:

// 自定義中間件.
app.UseRquestCulture();

一般來講,我們是在ConfigureServices 方法中註冊服務,然後在Configure 方法中使用,但是
Configgure 方法可使用IApplicationBuilder實例來配置請求管道,不需要再服務容器重註冊。當然我們也可以那麼做,請參看: https://github.com/aspnet/Docs/tree/master/aspnetcore/fundamentals/startup/sample


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在項目中,遇到需求,需要進行規則入庫,想到使用正則進行表達式的拆分和分類,具體如下: 目標是:拆分介於表示邏輯運算的“And”或者“Or”的子句,比如:Operation Mode(Operation Mode_2) (Approve CR1) equals Accept;Need Physical ...
  • 題目描述 給定一個完全圖,保證$w_{u,v}=w_{v,u}$且$w_{u,u}=0$,等概率選取一個隨機生成樹,對於每一對$(u,v)$,求$dis(u,v)$的期望值對$998244353$取模。 輸入 第一行一個數$n$ 接下來$n$行,每行$n$個整數,第$i$行第$j$個整數表示$w_{ ...
  • 因為對錶達式樹有點興趣,出於練手的目的,試著寫了一個深拷貝的工具庫。支持.net standard2.0或.net framework4.5及以上。 GitHub地址https://github.com/blurhkh/DeepCopier nuget地址https://www.nuget.org/ ...
  • 一、WebApi路由機制是什麼? 路由機制通俗點來說:其實就是WebApi框架將用戶在瀏覽器中輸入的Url地址和路由表中的路由進行匹配,並根據最終匹配的路由去尋找並匹配相應的Controller和Action並執行的一個過程。 從WebApi框架接收到來自外部環境的介面調用請求到指定介面的執行大概需 ...
  • 概述 UWP Community Toolkit 中有一個為 Frmework Element 提供投影效果的控制項 - DropShadowPanel,本篇我們結合代碼詳細講解 DropShadowPanel 的實現。 DropShadowPanel 提供的陰影效果有很多應用場景,比如給文本提供陰影 ...
  • 所謂熱插拔就是插件可以 在主程式不重新啟動的情況直接更新插件, 網上有很多方案: https://www.cnblogs.com/happyframework/p/3405811.html 如下: 但是我發現有一種最簡單粗暴的辦法, 就是把插件載入到記憶體當中,然後使用Assembly從記憶體中載入DL ...
  • 使用靜態基類方案讓 ASP.NET Core 實現遵循 HATEOAS Restful Web API. 還有一個動態的方案, 以後再寫. ...
  • 做為一個碼農,對新技術的學習是必須滴,但是在學習的同時也要記錄下筆記。讓子彈飛的一句話“步子邁大了容易扯著dan” 話糙理不糙。這句感覺很貼切我們的碼農。 真正做開發滿打滿算有4年了。其中兩年的時間幾乎就像流水線工人的工作,每天也就是改改bug,寫寫存儲過程,當時的存儲過程是信手拈來,一些臨時表、游 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...