【ASP.NET Core】淺說目錄瀏覽

何謂「淺說」?就是一句話說不完,頂多兩句話就介紹完畢,而後直接給上實例的解說方式。化繁爲簡,從七千年前到如今,從老祖宗到我們,一直都在追求的理想目標,儘量把複雜的東西變成簡單的。編程

老周告訴你一個能夠彰顯你編程很厲害的方法——那就是跟不懂編程的人講編程,你要是能把不懂的人給說懂了,那你的實力是 up up 的。既充滿情趣又能讓你動力十足的作法,就是你跟妹子講編程,你要是有本事用編程把她逗得心花盛開的話,老周服了你。瀏覽器

好了,以上內容純屬天外理論,下面就開始談談目錄瀏覽的事情。說白了,就是這樣:你用瀏覽器輸入某個 URL,而後服務器以 HTML 頁的形式返回某個目錄下的目錄和文件列表。就像下面這張高清無碼無水印的截圖所呈現那樣。服務器

 

這種 Web 訪問方式你確定很熟悉的,之前,在 IIS 裏面,尤爲是過去的 ASP,若是找不到默認頁,常常會讓你瀏覽目錄的。app

這就是我們今天要說的目錄瀏覽,固然,是說如何在 ASP.NET Core 中實現。ide

 

前文老周說了,化繁爲簡,更況且 Core 原本就很簡潔,因此,你學會本文內容無需任何理論知道,你只會抄代碼就行,下面我直接告訴你怎麼弄。測試

一、請準備4、五張圖片文件,這個用來測試。固然,其餘文件也能夠,之因此我選圖片文件,是由於文件不大,並且還能夠養眼。ui

二、新建項目(空白便可)。spa

三、創建項目後,項目模板會默認爲你生成一個叫 wwwroot 目錄。默認模板有這個的,若是沒有,你用的 VS 是盜版的。3d

四、在 wwwroot 目錄下面新建一個目錄,叫 images。code

五、在新建的 images 目錄下,把前面準備的圖片放進來。

弄完以後,你以爲你的目錄結構大概是這樣就能夠了,作示例不須要作得太死,能學到東西就好。

 

好,說說這個 wwwroot 目錄是個什麼玩具?一句話:它用來放置靜態的 Web 資源。

錘黑板,劃重點,期末考試不考。注意其中的「靜態」,什麼叫靜態呢?就是不動的唄,啥是不動的呢,好比 js 腳本、圖像、視頻、音頻、樣式表……說白了,一句話:不須要在服務器上執行的。

對應的,固然是動態資源了,啥是動態?固然是會態的,就是在服務器上要執行的,好比 Razor 頁面/視圖,代碼文件之類。

能理解上面的,你就明白了,就是說,到你店裏閒逛的人,能夠放到 wwwroot 目錄中,但你不能把你老婆放那裏。

 

打開 Startup.cs 文件,在 Startup.ConfigureServices 方法上開啓目錄瀏覽功能。

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDirectoryBrowser();         }

這個你得記住啊,不少朋友會忘了的。這是功能(服務)的註冊階段,註冊了才能用。

 

而後,在 Startup.Configure 方法中使用目錄瀏覽。

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseDirectoryBrowser();         }

 

通過以上兩步,完工了,對,就這麼簡單。運行一下唄。運行後,在瀏覽器地址欄中直接輸入根 URL,就能看到 wwwroot 目錄裏的東東了。

你能夠點擊 images 子目錄,進去玩玩。

是否是看到剛纔你準備的那幾個文件了?若是看到了,說明你的代碼沒問題,若是看不到,請檢查人品。

 

這時候,你又會問了,咦!路徑中咋沒有了 wwwroot ?是啊,由於這個其實很像之前的虛擬目錄,它的路徑描述不必定與物理路徑同樣的。還有,默認的狀況下,瀏覽目錄是以 wwwroot 目錄爲根的,因此,你一輸入根 URL 就能看到 images 子目錄就是這個緣由。

接着,你很好奇地點一下上面的文件,想打開或者下載。然而,你失望了……熟悉又陌生的 404。

不管是編程仍是泡妞,你必定要記住:遇到問題千萬不要大喊大叫,千萬別罵娘。連親孃都罵的簡直不是個東西,再說了,大叫大嚷是沒教養的表現。下面,老周鎮定自若地給你講講出現親愛的 404 的緣由。

原來,UseDirectoryBrowser 只是讓你訪問目錄而已,可沒讓你訪問文件哦,唉,怪上帝,怪老周不提早說明。老周是故意不說明的,要是提早說了,你就不會學到這個技巧了。

好,開始解決問題,很簡單,把 Static File 功能也用上就能夠了。前面那個讓你看目錄,如今這個讓你看文件,把兩個合起來,那就是目錄文件一塊兒看。固然,順便說一下,若是你想把這些功能合併一塊兒用,其實還有一種更佳的套路——UseFileServer,好比這樣。

    app.UseFileServer();

File Server 是把目錄瀏覽(默認關閉的)和靜態文件訪問合起來,本文後面再說。

 

如今咱們先說說如何解決剛纔不能訪問文件的問題,對,用上 Static File 就能夠了。

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
          app.UseStaticFiles(); app.UseDirectoryBrowser();         }

好了,如今再試試看。

 

 

但,你也許想到了,我好像不必把整個 wwwroot 都暴露給別人,總得留點隱私吧,或者說,個人靜態資源可能不在 wwwroot 目錄下。

這樣的話,你能夠配置一下選項。

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseStaticFiles(new StaticFileOptions
            {
                FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(),"wwwroot/images")),
                RequestPath = "/files"
            });
            app.UseDirectoryBrowser(new DirectoryBrowserOptions {
                FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(),"wwwroot/images")),
                RequestPath = "/files"
            });
        }

對於 FileProvider 屬性,咱們通常用  PhysicalFileProvider 類,注意必需要使用絕對路徑。由於不一樣系統的目錄結構不一樣,好比 Linux 上就跟 Windows 不一樣,所以獲取當前目錄路徑,最好用 Directory.GetCurrentDirectory 方法。

RequestPath 屬性就相似於指定虛擬目錄,你能夠爲絕對路徑設定一個相對的 URL,而後經過這個相對 URL 就能夠訪問到對應的目錄。好比本例子,相對 URL 就是 /files。

爲了可以瀏覽目錄的同時訪問文件,UseDirectoryBrowser 與 UseStaticFiles 中的配置要相同,好比,指定的物理路徑要相同,分配的相對 URL 要相同。

如今,運行項目,你要輸入 http://localhost:5000/files/ 來訪問目錄。

這時候,你看不到 images 目錄的名字了,它變成 files 了。這樣在必定程度上隱藏了真實目錄。

 

若是你以爲這樣麻煩,按前面提過的,你能夠合起來,直接用 File Server。

            app.UseFileServer(new FileServerOptions
            {
                FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/images")),
                RequestPath = "/files",
                EnableDirectoryBrowsing = true
            });

注意,裏面的 EnableDirectoryBrowsing 屬性必定要設置爲 true,否則的話就無法瀏覽目錄了。

 

好了,今天的話題就扯到這兒了。最近寫博客少了,沒辦法,事情多。

相關文章
相關標籤/搜索