浅析静态文件中间件

本文详细介绍了ASP.NET Core中静态文件中间件的使用,包括将/wwwroot作为根目录、目录形式显示文件、文件目录映射为URL、使用MapWhen方法,以及源码下载,帮助开发者更好地理解和配置静态文件服务。

一、/就是wwwroot的根目录

app.UseDefaultFiles();//默认就是根目录的index,DefaultFileNames里面包含了index
app.UseStaticFiles();// /就是wwwroot的根目录

会导航到wwwroot下的index.html

二、目录形式显示文件

1.在ConfigureServices注入

代码如下(示例):

services.AddDirectoryBrowser();

2.在Configure配置

代码如下(示例):

app.UseDirectoryBrowser();

结果如下:
在这里插入图片描述

三、文件目录映射为url地址

代码如下(示例):

 string path = Path.Combine(Directory.GetCurrentDirectory(), "file");
            app.UseStaticFiles(new StaticFileOptions()
            {
                RequestPath = "/files",//文件目录映射为url地址
                FileProvider = new PhysicalFileProvider(path)
            });

四、MapWhen形式

代码如下(示例):

  app.MapWhen(context =>
            {
                return !context.Request.Path.Value.StartsWith("/api");
            }, appBuilder =>
            {
                var option = new RewriteOptions();
                option.AddRewrite(".*", "/index.html", true);
                appBuilder.UseRewriter(option);
                appBuilder.UseStaticFiles();
            });

输出响应头如下:
在这里插入图片描述
Run方式:

            app.MapWhen(context =>
            {
                return !context.Request.Path.Value.StartsWith("/api");
            }, appBuilder =>
            {
                appBuilder.Run(async requestDelegate =>
                {
                    var file = env.WebRootFileProvider.GetFileInfo("index.html");
                    requestDelegate.Response.ContentType = "text/html";
                    using (var fileSystem = new FileStream(file.PhysicalPath, FileMode.Open, FileAccess.Read))
                    {
                        await StreamCopyOperation.CopyToAsync(fileSystem, requestDelegate.Response.Body, null, bufferSize, requestDelegate.RequestAborted);
                    }
                });
            });

响应头如下:
在这里插入图片描述
结论:Run方式没有cache相关的响应头。

五、源码下载

下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值