ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中間件

註冊startup類能夠配置咱們web應用的啓動邏輯,使用的就是UseStartUp方法,asp.net core就會實例化這個類
並調用startup類裏面的兩個方法ConfigureServices和Configure

ConfigureServices方法裏是註冊服務,注入這些服務後就能夠注入到其餘的方法或者類裏面進行使用,這些註冊的服務包括咱們本身的寫這些服務,也包含.net core預約義好的一些服務

也包含.net core預約義好的一些服務,有一些默認也是沒有註冊的,須要咱們在這裏註冊下

方法:Configure裏面,咱們使用IApplicationBuilder來配置咱們的中間件,在真實的項目裏不多使用app.Run方法,一般app.Run裏面配置的中間件都是很是簡單的中間件,因此在真實的羨慕裏面,不大用app.Run這個中間件

真實項目裏一般使用app.use開頭的這些方法
useCors是跨域的,use開頭的方法把中間件都封裝了另一個方法或者另一個類裏面了

例如這裏使用useWelcomePage();這個中間件,運行查看效果

打開

換個路由地址都是這個歡迎頁,無論你進來是什麼樣的路徑,都是這個歡迎頁,後面的中間件就不會走了

中間件的參數一般在這裏寫,一般是一個對象,例如這裏

而後經過參數的設置來配置中間件

例如這裏咱們設置中間件的路徑是/Welcome

路由路徑後面加上welcome纔會跳轉到這個歡迎頁

其餘路徑就會走下面的 中間件html

app.use方法

直接在方法裏面寫中間件,比直接UseWelcomePage更底層一些

他的參數是一個Func,Func自己的參數類型就是RequestDelegate,Func返回的類型也是RequestDelegate
RequestDelegate類型就是一段可執行的代碼

這個參數Func有個參數,咱們叫它next,如今這個next就是RequestDelegate類型,RequestDelegate表明什麼意思呢?
它就表明在管道里,下一個將要執行的中間件,若是我在管道調用這個next就表示容許寫一箇中間件來處理http請求

中間件裏須要返回的類型仍是一個RequestDelegate

它須要傳入一個httpContext做爲他的參數,它的返回類型是Task

若是路徑裏面帶firtst就輸出一段字符串,不然就走next執行下一個中間件

輸入first的結果



輸入其餘地址就走最後一箇中間件web

注入日誌工具

爲了看走的中間件的明細,這裏注入日誌工具
Logger已經註冊到服務裏面了,是預先註冊的


用命令行運行









這裏直走了一次

選中的這段代碼,這個方法,只是在啓動配置的時候走了一遍

這塊纔是咱們中間件的代碼,每次請求可能都會走這段代碼,若是沒有其餘的中間件攔截的話編程

異常信息

把其餘的中間件代碼都刪除,在這裏拋出一段異常看一下會有什麼效果


做爲開發者咱們可能須要錯誤的信息,就須要這個中間件,把這段代碼取消註釋

顯示了詳細的錯誤信息,異常發生在 哪行代碼

UseDeveloperExceptionPage放在位置比較靠前的位置,開發者異常頁面只適合給開發者看,客戶不適合看
在開發的環境下才會中這個中間件

經過IHostingEnvironment來獲取到底應用於那個環境裏,這裏這個環境一般是指開發環境或者是生產環境,或者測試環境

看下env裏面有什麼:


IsStaging叫作預演環境也行,演示環境也行

也可使用自定義的其餘的環境,判斷是不是集成測試的環境,參數是自定義的,能夠隨便起名

如何設置或者取得環境變量的值

也可使它設置環境變量的值

環境變量的屬性名呢?剛纔說的都是環境變量的值。ASPNETCORE_ENVIRONMENT這個是環境變量的屬性名


使用IISExpress調試就會走這段配置

因此這裏咱們運行後走的是Development環境

配置的屬性也能夠在這裏修改

修改爲Production

而後這裏這個文件就編程了Production

改爲Staging

屬性這裏也發生了改變

命令行走的是這一段代碼



對應的分別是這兩段

開發環境會把這個文件也會追加上
跨域

視圖靜態文件中間件

建立wwwroot文件夾,建立完成後,文件夾的圖標立馬變了

在wwwroot文件夾下新建index.html文件



運行起來, 可是輸入路徑找這個index.html找不到

由於startUp裏面設置的中間件只能返回welcome的信息

咱們須要設置另一箇中間件UseStaticFiles

再次訪問,能夠訪問到了

若是想使用其餘的文件件名做爲默認文件,能夠在參數裏面進行配置,注意這裏是UseDefaultFiles()這個中間件

UseDefaultFiles並非視圖文件,並不會把index.html內容返回去。它會改變請求的路徑,它把這個請求的路徑改爲好像是咱們要找的是index.html,他就改爲index.html這個路徑
而後再把這個請求傳送到下一個中間件。也就是這個UseStaticFiles,UseStaticFiles一看是index.html,他就會找到這個文件,並把這個文件返回去。就是這麼個原理,
因此中間件的順序很重要
若是把UseStaticFile放在UseDefaultFiles的前面,那麼就找不到這個頁面了。


UserFileServer把UseStaticFile和UseDefaultFiles這兩個中間件包進去了。可是他還有一些其餘功能,包括目錄瀏覽。這裏直接使用這一個中間件也是能夠的

只寫這一個也能夠正常的訪問







 app

相關文章
相關標籤/搜索