Skip to main content

静态文件支持

分类:  Asp.net Core入门 标签:  #Asp.Net core基础 #基础 #Web 发布于: 2023-06-04 20:43:38

静态文件主要是指在ASP.net Core项目种的包括jscsshtml图片等等资产。ASP.net Core会直接向客户端返回这些资产。

使用静态文件中间件

静态文件默认是存储在web root目录,这个目录默认是在{contentroot}/wwwroot里,但是也可以使用扩展方法UseWebRoot来进行改变。在ASP.net Core的模板里是使用方法CreateDefaultBuilder来设置Content rootweb root的。

默认的web root的布局是:

  • wwwroot
    • css
    • js
    • lib

启用中间件

直接从模板里可以看到:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();

    app.UseStaticFiles();

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapDefaultControllerRoute();
    });
}

然后访问的时候可以这样:

<img src="~/images/MyImage.jpg" class="img" alt="My image" />

为在web root之后的静态文件提供服务

例如在wwwroot之外有一个文件夹叫做:MyStaticFiles

那么这样:

    // using Microsoft.Extensions.FileProviders;
    // using System.IO;
    app.UseStaticFiles(new StaticFileOptions
    {
        FileProvider = new PhysicalFileProvider(
            Path.Combine(env.ContentRootPath, "MyStaticFiles")),
        RequestPath = "/StaticFiles"
    });

这样就可以这样访问了:

<img src="~/StaticFiles/images/red-rose.jpg" class="img" alt="A red rose" />

发送HTTP Response headers

可以这样操作:

    const string cacheMaxAge = "604800";
    app.UseStaticFiles(new StaticFileOptions
    {
        OnPrepareResponse = ctx =>
        {
            // using Microsoft.AspNetCore.Http;
            ctx.Context.Response.Headers.Append(
                 "Cache-Control", $"public, max-age={cacheMaxAge}");
        }
    });

关于静态文件还有很多其他平时不太用得上得功能,详细您可以参考这里:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files?view=aspnetcore-5.0