asp.net core StaticFiles中間件修改wwwroot


new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"webroot")),
RequestPath = new PathString("")
})

 

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

告別需要使用文件,又需要安裝一個web服務器。現在隨時隨地打開程序即可使用,跨平台,方便快捷。

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

下面我們就來使用StaticFiles 開發一款簡易靜態文件服務器。還可以直接運行純靜態的網站。

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

 

使用StaticFiles 中間件

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

添加 Microsoft.AspNetCore.StaticFiles 引用

Install-Package Microsoft.AspNetCore.StaticFiles -Pre

添加好引用以后,我們在Startup.cs 添加

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

我們在wwwroot 添加一張圖 ASP-NET-Banners-01.png

然后程序運行起來

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 就可以訪問。這樣就能訪問電腦的文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM