【ASP.NET Core Web】静的ファイルのアクセス設定

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【ASP.NET Core Web】静的ファイルのアクセス設定

2023-11-13 | ,

ASP.NET Core Webで静的ファイルのアクセス関連の設定したい!

概要

今回の記事では、ASP.NET Core WebでASP.NET Core Webで静的ファイルのアクセス関連の設定する手順を掲載する。

仕様書

環境

  • .NET 7.0

手順書

今回は、wwwroot/staticにあるサブディレクトリを含む静的ファイルに認証なしでアクセスできるよう、認証後にwwwroot全体の静的ファイルにアクセスできるよう設定する。

Startup.csUseStaticFilesメソッドを追加するんだけども、ConfigureServicesメソッド内の処理はいわゆるパイプライン処理となってるのでメソッドを呼び出す順番も影響するので注意されたし。

public class Startup
{
    ...

    public void ConfigureServices(IServiceCollection services, IWebHostEnvironment env)
    {
        ...

        app.UseStaticFiles(new StaticFileOptions
        {
            FileProvider = new PhysicalFileProvider(
                Path.Combine(env.WebRootPath, "static")),
            RequestPath = "/static"
        });

        app.UseRouting();
        app.UseAuthentication();
        app.UseAuthorization();

        app.UseStaticFiles();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=home}/{action=index}/{id?}");
        });
    }

    ...
}

下記の部分が認証ありなしでアクセスできる静的ファイルの区切りとなってて

        app.UseRouting();
        app.UseAuthentication();
        app.UseAuthorization();

前の

        app.UseStaticFiles(new StaticFileOptions
        {
            FileProvider = new PhysicalFileProvider(
                Path.Combine(env.WebRootPath, "static")),
            RequestPath = "/static"
        });

の部分が認証無しでアクセスできる制定ファイルの設定。
ログイン画面に使うデータの保管先を設定する感じ。

後の

        app.UseStaticFiles();

の部分が認証後にアクセスできる静的ファイルの設定。

引数なしだとwwwroot全体の静的ファイルにアクセスできるようになる。

こっちで認証無しの設定のように引数をつかって、認証後にアクセスできる静的ファイルの範囲を設定することもできる。

Program.csMainメソッドを使ってる場合

.NET 7で新しくプロジェクトを作るとStartup.csUseStaticFilesメソッドは作られず、Program.csMainメソッドにサーバーの起動時の設定を書くように変わったみたい。

んで、IWebHostEnvironmentUseEndpointsの呼び出し方も変わって以下のような感じに。

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);

        ...

        var app = builder.Build();

        app.UseStaticFiles(new StaticFileOptions
        {
            FileProvider = new PhysicalFileProvider(
                Path.Combine(app.Environment.WebRootPath, "static")),
            RequestPath = "/static"
        });

        app.UseRouting();
        app.UseAuthentication();
        app.UseAuthorization();

        app.UseStaticFiles();

        app.MapControllerRoute(
            name: "default",
            pattern: "{controller=home}/{action=index}/{id?}");
        };

        app.Run();
    }
}

まとめ(感想文)

順番が関係あることを知らずに無駄に時間を浪費したよね…。