[ASP.NET Core] 使用靜態檔案的Middleware(UseStaticFiles)

使用靜態檔案的Middleware(UseStaticFiles)

UseStaticFiles


.NetCore需要在 Startup 加入 StaticFileMiddleware 才能直接訪問靜態檔案,預設的路徑為 wwwroot

app.UseStaticFiles();

新增一個檔案放在 wwwroot 底下

並且加入 StaticFileMiddleware 後,網址根目錄指向資料夾 wwwroot,若存在指定的檔案,則可以直接訪問 index.html,若找不到檔案,則會繼續往下面的Middleware進行

若需要指定 wwwroot 外的路徑為靜態檔案路徑,可以使用 UseStaticFiles 的多載,我指定路徑 “RootFile” 會指向根目錄下的 File 資料夾

app.UseStaticFiles(new StaticFileOptions
{
    RequestPath = "/RootFile",
    FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(),
                                            "File"))
});

UseDefaultFiles


使用 DefaultFilesMiddleware 可以指定進入預設的 File

app.UseDefaultFiles();

UseDirectoryBrowser


若想要開啟資料夾的瀏覽功能,可以使用UseDirectoryBrowser,稍有不同的是除了 Middleware,還需要額外加入 Service

多載可以指定要啟用功能的目錄

public void ConfigureServices(IServiceCollection services)
{
    services.AddDirectoryBrowser();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseDirectoryBrowser("/Test");
}

UseRewriter


先前曾在 vue.js 的文章中提到,若要實現SPA,需要請後端啟用 UrlRewrite 的功能,下面程式碼將會把所有不是對 api 的請求做 UrlRewrite 到 index.html

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

    builder.UseRewriter(options);
    builder.UseStaticFiles();
});

Sample Code