• 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 就可以访问。这样就能访问电脑的文件。

  • 相关阅读:
    ElasticSearch的高级复杂查询:非聚合查询和聚合查询
    js上传文件前判断获取文件大小并且加以判断
    如何使用IE9浏览器自带开发人员工具捕获网页请求
    目标的滚动条样式设置
    springmvc配置数据源方式
    SSO单点登录一:cas单点登录防止登出退出后刷新后退ticket失效报500错,也有退出后直接重新登录报票根验证错误
    解决myeclipse中新建javaweb工程,无法使用Web App Libraries问题
    敏捷宣言(十七)
    敏捷宣言(十六)
    敏捷宣言(十五)
  • 原文地址:https://www.cnblogs.com/liangxiaofeng/p/5822859.html
Copyright © 2020-2023  润新知