c++ builder创建def文件_[核心组件] 静态文件

本文介绍了在ASP.NET Core中如何处理静态文件,包括使用`UseStaticFiles`中间件发布web根目录下的资源,以及如何处理其他目录的静态文件。当需要访问目录时,通过`UseDirectoryBrowser`中间件可以展示文件目录。为了确保安全,可以使用`UseDefaultFiles`中间件设置默认文件。注意`UseDefaultFiles`需在`UseStaticFiles`之前调用。
摘要由CSDN通过智能技术生成

什么是静态文件

     在 Web 开发中,像js,css,img等都称为静态文件,Asp .Net Core 提供了三个中间件来处理静态文件,我们不仅可以通过http请求将这些物理文件发布成可以Web资源,还可以将所在目录的物理结构也给呈现出来。

    在项目目录中有一个【wwwroot】的文件夹,这个是web根目录,在根目录下所有的文件会自动发布成资源,客户端可以通过url读取对应的文件。

4822cc3cee2f74846424e7e667afc79b.png

    【UseStaticFiles】是其中一个处理静态文件的中间件。在项目启动时调用   【UseStaticFiles】就能启动这个功能。

public static void Run(){    Host.CreateDefaultBuilder()        .ConfigureWebHostDefaults(builder => builder.Configure(            app=>app.UseStaticFiles()))        .Build()        .Run();}

    看一下结果:

bed8fd7d7ed2fafaa55f62699f8730e7.png

9a471d8d1e22ace334cea1f21467e7cc.png

8e4f5304b2cbb0be7fc180ce1aefe4c3.png

    【UseStaticFiles】会将web根目录下所有文件发布成资源,那要是文件存在别的目录下该怎么做呢?

    在asp .net core 中呢都是利用一个文件提供对象来处理静态文件的 ,虽在在这里使用【UseStaticFiles】来处理静态文件,但是在他的内部同样维护着一个文件提供对象和请求路径的映射关系。再调用这个方法的时候,如果没有指定任何参数,这个映射关系的请求路径就是项目的根地址,对应的文件提供对象自然指向web根目录【wwwroot】。

    所以我们实现这一功能就要显示的指定映射关系。例如我们要获取【content】下面的文件

public static void Run(){    var path = Path.Combine(Directory.GetCurrentDirectory(), "content");    // 静态文件中间件配置    var options = new StaticFileOptions    {        FileProvider = new PhysicalFileProvider(path),        RequestPath = "/content"    };    Host.CreateDefaultBuilder()        .ConfigureWebHostDefaults(builder => builder.Configure(            app=>app                // 静态文件中间件                .UseStaticFiles()                .UseStaticFiles(options)))        .Build()        .Run();}

    第一步,获取项目路径

    第二步,创建配置对象

    第三步,将配置传入中间件

252d05ad5b81c28c26217efde27ab0ce.png

    运行没有问题,我们再看一下【wwwroot】下的有没有问题。

1c2029a20ce7245bde25909c6aab89b9.png

    根目录也没有问题,因为我们添加两个【UseStaticFiles】,目前这个只能满足找到具体的文件,如果访问目录的就会报404的错误,如何像开始那样可以访问到目录呢?这就要用到一个目录浏览的中间件。

    添加【UseDirectoryBrowser】中间件就可以返回一个html页面将文件目录以列表的方式呈现出来,不加参数时,则对应的是web根目录。

public static void Run(){    var path = Path.Combine(Directory.GetCurrentDirectory(), "content");    var fileProvider = new PhysicalFileProvider(path);    var staticFileOptions = new StaticFileOptions    {        FileProvider = fileProvider,        RequestPath = "/content"    };    // 目录浏览中间件配置    var directoryBrowserOptions = new DirectoryBrowserOptions    {        FileProvider = fileProvider,        RequestPath = "/content"    };    Host.CreateDefaultBuilder()        .ConfigureWebHostDefaults(builder => builder.Configure(            app=>app                // 目录浏览中间件                .UseStaticFiles()                .UseStaticFiles(staticFileOptions)                .UseDirectoryBrowser()                .UseDirectoryBrowser(directoryBrowserOptions)))        .Build()        .Run();}

1b1333c8066bb84e723fb36e3185a6ee.png

67813edf49bd49ed4814192fdbc00ab8.png

    这样就可以将文件目录给呈现出来了,但这样就会存在安全的问题,那可不可以在访问目录的时候只给它默认的文件看呢?这是就用到默认页面中间件【UseDefaultFiles】,用法和上面两个一样。

// 默认页面中间件配置var defaultFilesOptions = new DefaultFilesOptions{    FileProvider = fileProvider,    RequestPath = "/content"}

    ps:【UseDefaultFiles】必须在【UseStaticFiles】之前调用

Host.CreateDefaultBuilder()    .ConfigureWebHostDefaults(builder => builder.Configure(        app => app            // 默认页面中间件            .UseDefaultFiles()            .UseDefaultFiles(defaultFilesOptions)            .UseStaticFiles()            .UseStaticFiles(staticFileOptions)            .UseDirectoryBrowser()            .UseDirectoryBrowser(directoryBrowserOptions)))    .Build()    .Run();

    如果目录下的默认文件没有按照约定命名,我们可以同手动添加的方式添加进来。

defaultFilesOptions.DefaultFileNames.Add("readme.html");

642718c41239f04e4580b1677978f1b3.png

感谢您的关注,您分享和点赞,是我分享路上最大的动力

留言区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值