📘
C#(.NET)APIをファイルサーバーとして使用する方法
やりたい事
下のリンクの方法でC#のAPIを立てたときに、APIエンドポイントをそのまま使用し"http://localhost:8000/images/image.png"みたいに好きなディレクトリを切り静的ファイルを配置し、そこにアクセスできるようにしたい
環境
- .NET6.0
- Windows10
- Visual Studio 2022
参考ページ
やった事
-
https://learn.microsoft.com/ja-jp/aspnet/core/tutorials/first-web-api?view=aspnetcore-7.0&tabs=visual-studio
に沿ってAPIを立てます。 - Program.csに下記のようにapp.UseStaticFileを追加します。
Program.cs
using Microsoft.EntityFrameworkCore;
using API.Models;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddDbContext<TodoContext>(opt =>
opt.UseInMemoryDatabase("TodoList"));
var app = builder.Build();
app.UseStaticFiles();
app.UseAuthorization();
app.MapControllers();
app.Run();
- "API"を右クリックし"追加">"新しいフォルダー"を選択、"wwwroot"という名前のフォルダを追加する。デフォルト設定で"wwwroot"の名称フォルダ下に置いたものが公開される。
成功すると下記画面のように青いアイコンでwwwrootが表示される。
- Visual StudioのPJフォルダをクリックし、wwwrootの中に適当にフォルダとファイルを追加する。今回は"images"というフォルダを切り、jpg画像を一枚置いておく。
- Visual StudioでAPIを起動し、
"http://localhost:<設定したポート>/images/flower.jpg"
にアクセスすると画像にアクセスできる。
注意点
上記はVisual Studioの「デバッグなしで開始」を押したとき向けのやり方です。
Release版でビルドしてexeファイルから実行したい場合は、wwwrootフォルダの作成するべき場所が変わるので注意してください。
具体的なやり方は下記の通り。
- Visual StudioでReleaseを選択し、「ソリューションのビルド」もしくは「ソリューションのリビルド」を選択する
- C#のプロジェクトファイル配下にReleaseフォルダが生成されるので、下記画像のディレクトリ構成となるようにwwwrootフォルダを作成する。
- wwwrootフォルダ配下にフォルダなり画像なり好きな構成を作る(今回はimagesフォルダを切り画像ファイルを入れました)。
- ブラウザから画像にアクセスできるようになる
おわりに
すでにAPIとkestrelサーバーを立てている状態でファイルサーバーもう一個立ち上げるのはどうかな~と思い、kestrelをファイルサーバーとして扱う方法が無いか調べたらありました。
Discussion