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

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

一、DirectoryBrowserMiddleware

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

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