📘

C#(.NET)APIをファイルサーバーとして使用する方法

2023/04/04に公開

やりたい事

下のリンクの方法でC#のAPIを立てたときに、APIエンドポイントをそのまま使用し"http://localhost:8000/images/image.png"みたいに好きなディレクトリを切り静的ファイルを配置し、そこにアクセスできるようにしたい
https://learn.microsoft.com/ja-jp/aspnet/core/tutorials/first-web-api?view=aspnetcore-7.0&tabs=visual-studio

環境

  • .NET6.0
  • Windows10
  • Visual Studio 2022

参考ページ

やった事

  1. https://learn.microsoft.com/ja-jp/aspnet/core/tutorials/first-web-api?view=aspnetcore-7.0&tabs=visual-studio
    に沿ってAPIを立てます。
  2. 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();
  1. "API"を右クリックし"追加">"新しいフォルダー"を選択、"wwwroot"という名前のフォルダを追加する。デフォルト設定で"wwwroot"の名称フォルダ下に置いたものが公開される。

    成功すると下記画面のように青いアイコンでwwwrootが表示される。
  2. Visual StudioのPJフォルダをクリックし、wwwrootの中に適当にフォルダとファイルを追加する。今回は"images"というフォルダを切り、jpg画像を一枚置いておく。
  3. Visual StudioでAPIを起動し、
    "http://localhost:<設定したポート>/images/flower.jpg"
    にアクセスすると画像にアクセスできる。

注意点

上記はVisual Studioの「デバッグなしで開始」を押したとき向けのやり方です。
Release版でビルドしてexeファイルから実行したい場合は、wwwrootフォルダの作成するべき場所が変わるので注意してください。
具体的なやり方は下記の通り。

  1. Visual StudioでReleaseを選択し、「ソリューションのビルド」もしくは「ソリューションのリビルド」を選択する
  2. C#のプロジェクトファイル配下にReleaseフォルダが生成されるので、下記画像のディレクトリ構成となるようにwwwrootフォルダを作成する。
  3. wwwrootフォルダ配下にフォルダなり画像なり好きな構成を作る(今回はimagesフォルダを切り画像ファイルを入れました)。
  4. ブラウザから画像にアクセスできるようになる

おわりに

すでにAPIとkestrelサーバーを立てている状態でファイルサーバーもう一個立ち上げるのはどうかな~と思い、kestrelをファイルサーバーとして扱う方法が無いか調べたらありました。

Discussion