和StaticFileMiddleware中間件一樣,DirectoryBrowserMiddleware中間本質上還是定義了一個請求地址與某個物理目錄之間的映射關系,而目標目錄體現(xiàn)為一個FileProvider對象。當這個中間件接收到匹配的請求后,會根據(jù)請求地址解析出對應目錄的相對路徑,并利用這個FileProvider獲取目錄的內容。目錄的內容最終會以一個HTML文檔的形式被定義,而此HTML最終會被這個中間件作為響應的內容,“目錄瀏覽器”的實現(xiàn)原理就這么簡單。 [本文已經(jīng)同步到《ASP.NET Core框架揭秘》之中]

目錄
一、DirectoryBrowserMiddleware
二、DirectoryFormatter
三、具體請求處理邏輯
四、自定義DirectoryFormatter

一、DirectoryBrowserMiddleware

接下來我們來看看DirectoryBrowserMiddleware的定義。如下面的代碼片段所示,DirectoryBrowserMiddleware的第二個構造函數(shù)具有四個參數(shù),其中第二個參數(shù)是代表當前執(zhí)行環(huán)境的HostingEnvironment。作為第三個參數(shù)的是一個HtmlEncoder對象,當目標目錄被呈現(xiàn)為一個HTML文檔的時候,它被用于實現(xiàn)針對HTML的編碼,如果沒有顯式指定(調用第一個構造函數(shù)),默認的HtmlEncoder(HtmlEncoder.Default)會被使用。至于第四個類型為IOptions<DirectoryBrowserOptions>的參數(shù),則承載了針對DirectoryBrowserMiddleware的配置選項,DirectoryBrowserOptions與前面介紹的StaticFileOptions一樣,它們都是SharedOptionsBase的子類。

   1: public class DirectoryBrowserMiddleware
   2: {
   3:    &nb