目次
概要
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の属性ルーティングの仕組みについて説明しました。
以下のルーティング規則は覚えておきましょう。


コメント