【ASP.NET Core】 Route属性 を使用してWeb APIの ルーティング設定 をする方法

コード

概要

ASP.NET Coreアプリケーションの属性ルーティングを利用してコントローラーへマッピングする方法をご紹介します。

前提

以下の環境で実施します。

  • .NET6 (6.01)
  • VisualStudio 2022 for mac (17.3)

事前準備

ASP.NET Core Web API アプリケーションを作成します。作成手順はこちらの記事を参考にしてください。

Program.csでの設定

ASP.NET Core 6.0 ではProgram.csにデフォルトで app.MapControllers(); の記述があり、これによって属性ルーティングが使えるようになります。

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

// この記述が必要
app.MapControllers();

app.Run();

コントローラークラス①

Route属性をクラスに指定する

以下のコントローラークラスを例に説明します。

[Route("api/[controller]")]
public class SampleController : Controller
{
    // GET: api/Sample
    [HttpGet]
    public string Get()
    {
        return "Hello World!";
    }

    // GET api/Sample/5
    [HttpGet("{id}")]
    public string Get(int id)
    {
        return id;
    }
}

1行目:[Route("api/[controller]")] でコントローラークラスへのマッピングを設定しています。
[controller]トークンはコントローラーのクラス名に置換されます。
ローカルの場合、http://localhost:5000/api/Sampleのようにしてリクエストを送ることができます。

HttpGet属性

5行目、12行目のHttpGetアトリビュートを指定するとHttp Getリクエストがマッピングされるようになります。

[HttpGet("{id}")]のように引数を指定すると、Routeで指定したapi/Sampleに加え何かしらの整数がリクエストURLに付加された場合にマッピングされ、メソッドの引数として渡されます。(例:http://localhost:5000/api/Sample/5 → 5が引数として渡される)
また、もし整数以外の値が付加されていた場合は400 Bat Requestを返します。

またHttpPostやHttpPutなどの属性を利用することで、リクエスト形式に応じたマッピングができるようになります。

コントローラークラス②

次に以下のように[Route(“[controller]/[action]”)]の指定をした場合について説明します。

[Route("[controller]/[action]")]
public class HomeController : Controller
{
  [HttpGet]
    public IActionResult Index()
    {
        return "Hello World!";
    }
}

[action]トークンはアクション名(コントローラークラスのメソッド名)に置換されます。
つまりhttp://localhost:5000/Home/IndexとGetリクエストを送ることでIndexメソッドがマッピングされるということです。

まとめ

Web APIの属性ルーティングの仕組みについて説明しました。
以下のルーティング規則は覚えておきましょう。

覚えておくべきルーティング規則
[controller]:コントローラークラス名
[action]:コントローラークラスのメソッド名
{ 引数名 }:リクエスト時に指定した値が引数に渡される

参考外部サイト

ASP.NET Core でのコントローラー アクションへのルーティング
ASP.NET Core MVC でルーティング ミドルウェアを使って、受信した要求の URL を照合し、アクションにマップする方法について説明します。

コメント

タイトルとURLをコピーしました