【ASP.NET Core Web】静的ファイルのアクセス設定
2023-11-13 | ASP.NET Core Web, C#
ASP.NET Core Webで静的ファイルのアクセス関連の設定したい!
概要
今回の記事では、ASP.NET Core WebでASP.NET Core Webで静的ファイルのアクセス関連の設定する手順を掲載する。
仕様書
環境
- .NET 7.0
手順書
今回は、wwwroot/static
にあるサブディレクトリを含む静的ファイルに認証なしでアクセスできるよう、認証後にwwwroot
全体の静的ファイルにアクセスできるよう設定する。
Startup.cs
にUseStaticFiles
メソッドを追加するんだけども、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.cs
のMain
メソッドを使ってる場合
.NET 7で新しくプロジェクトを作るとStartup.cs
にUseStaticFiles
メソッドは作られず、Program.cs
のMain
メソッドにサーバーの起動時の設定を書くように変わったみたい。
んで、IWebHostEnvironment
やUseEndpoints
の呼び出し方も変わって以下のような感じに。
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();
}
}
まとめ(感想文)
順番が関係あることを知らずに無駄に時間を浪費したよね…。