ASP.NET Core 開發-中間件(StaticFiles)使用

ASP.NET Core 開發,中間件(StaticFiles)的使用,咱們開發一款簡易的靜態文件服務器。web

告別須要使用文件,又須要安裝一個web服務器。如今隨時隨地打開程序便可使用,跨平臺,方便快捷。服務器

前一篇講解了中間件的開發,瞭解了中間件的知識。app

下面咱們就來使用StaticFiles 開發一款簡易靜態文件服務器。還能夠直接運行純靜態的網站。asp.net

新建的ASP.NET Core 項目,不是空的,也就會自帶StaticFiles 。wwwroot 就是靠這個中間件讀取的。async

 

使用StaticFiles 中間件

新建一個asp.net core項目,選擇空的模板。ide

添加 Microsoft.AspNetCore.StaticFiles 引用網站

Install-Package Microsoft.AspNetCore.StaticFiles -Pre

添加好引用之後,咱們在Startup.cs 添加ui

        public void Configure(IApplicationBuilder app)
        {
            app.UseStaticFiles();//使用默認文件夾wwwroot            
            app.Run(async (context) =>
            {
                await context.Response.WriteAsync("Hello World!");
            });
        }

咱們在wwwroot 添加一張圖 ASP-NET-Banners-01.pngspa

而後程序運行起來.net

http://localhost:5000/ASP-NET-Banners-01.png

 

若是我不想使用默認文件夾咋辦呢,咱們能夠使用 StaticFileOptions

        public void Configure(IApplicationBuilder app)
        {
            var staticfile = new StaticFileOptions();
            staticfile.FileProvider = new PhysicalFileProvider(@"C:\");//指定目錄 這裏指定C盤,也能夠是其它目錄
            app.UseStaticFiles(staticfile);
            app.Run(async (context) =>
            {
                await context.Response.WriteAsync("Hello World!");
            });
        }

 

我在c盤新建一個readme.txt  寫入 .net core 。

而後訪問: http://localhost:5000/readme.txt

 一個文件服務器,應該能夠瀏覽全部文件。

咱們就要用到UseDirectoryBrowser 

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

        public void Configure(IApplicationBuilder app)
        {
            var dir = new DirectoryBrowserOptions();
            dir.FileProvider= new PhysicalFileProvider(@"C:\");
            app.UseDirectoryBrowser(dir);
            var staticfile = new StaticFileOptions();
            staticfile.FileProvider = new PhysicalFileProvider(@"C:\");//指定目錄 這裏指定C盤,也能夠是其它目錄            
            app.UseStaticFiles(staticfile);
        }

這裏要在 ConfigureServices 方法加入

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

訪問:http://localhost:5000/

 

這樣咱們就能瀏覽C盤的文件了。

你會發現有些文件打開會404,有些又能夠打開。那是由於MIME 沒有識別出來。

咱們能夠手動設置這些 MIME ,也能夠給這些未識別的設置一個默認值。

        public void Configure(IApplicationBuilder app)
        {
            var dir = new DirectoryBrowserOptions();
            dir.FileProvider= new PhysicalFileProvider(@"C:\");
            app.UseDirectoryBrowser(dir);
            var staticfile = new StaticFileOptions();
            staticfile.FileProvider = new PhysicalFileProvider(@"C:\");//指定目錄 這裏指定C盤,也能夠是其它目錄
            staticfile.ServeUnknownFileTypes = true;
            staticfile.DefaultContentType = "application/x-msdownload"; //設置默認  MIME
            var provider = new FileExtensionContentTypeProvider();
            provider.Mappings.Add(".log", "text/plain");//手動設置對應MIME
            staticfile.ContentTypeProvider = provider;
            app.UseStaticFiles(staticfile);
        }

 

設置好之後,對於未識別的,默認爲下載。 .log 就被我手動設置成文本方式。

 

對於前面的這麼多設置,StaticFiles 提供了一種簡便的寫法。UseFileServer

            app.UseFileServer(new FileServerOptions()
            {
                FileProvider = new PhysicalFileProvider(@"C:\"),
                EnableDirectoryBrowsing = true
            });

若是須要加上MIME,StaticFileOptions 須要綁定上。

實際應用

不知道你們平時有沒有這樣的需求,手機想查看電腦的圖片或者視頻等文件。

這裏咱們將程序稍微加加一句代碼就能夠實現了。

在 Program.cs 中

        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseUrls("http://*:5000")//加上這個就能用ip:5000訪問
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }

在同一局域網內,使用 ip:5000 就能夠訪問。這樣就能訪問電腦的文件。

 

若是你以爲本文對你有幫助,請點擊「推薦」,謝謝。

相關文章
相關標籤/搜索