ASP.NET Core Static Files

之前寫的文章和參考

Asp.net core 學習筆記 ( IIS, static file 性能優化 )html

官網webpack

 

正文

一般 static files 會帶上 zip, cache, minifygit

zip 和 cache ASP.NET Core 都有 build-in 的, JS, CSS minify 用 Webpack, HTML 用 WebMarkupMingithub

public static class MiniCompressionCacheServiceCollectionExtensions
{
    public static IServiceCollection AddMiniCompressionCache(this IServiceCollection services)
    {
        services.AddResponseCompression(options =>
        {
            options.EnableForHttps = true;
        });

        var fileExtensionContentTypeProvider = new FileExtensionContentTypeProvider();
        fileExtensionContentTypeProvider.Mappings[".webmanifest"] = "application/manifest+json";
        services.Configure<StaticFileOptions>(options =>
        {
            options.ContentTypeProvider = fileExtensionContentTypeProvider;
            options.OnPrepareResponse = ctx =>
            {
                var cachePeriod = TimeSpan.FromDays(365 * 15).TotalSeconds.ToString();
                ctx.Context.Response.Headers.Append("Cache-Control", $"public, max-age={cachePeriod}");
            };
        });

        services.AddWebMarkupMin().AddHtmlMinification();
        return services;
    }
}

startup.cs > ConfigureServicesweb

services.AddMiniCompressionCache();

startup.cs > Configurejson

app.UseStaticFiles();

這樣就能夠了.api

 

處理沒有 extension 的 files

參考:安全

ASP.NET Core 2.0 - Serving files with no extension性能優化

How can you use multiple directories for static files in an aspnet core app?app

這個需求有點奇葩哦. 我是由於用 face-api.js, 它的 models files 是沒有 extension 的...

解決方法是在 startup.cs > Configure 加多一個 UseStaticFiles, 而後指定路徑來特別處理. ServeUnknownFileTypes 是有安全隱患的, 因此要當心用哦.

app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider(System.IO.Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/face-api-models")),
    RequestPath = "/face-api-models",
    ServeUnknownFileTypes = true,
});
相關文章
相關標籤/搜索