usingKnzwTech.AspNetCore.ResourceBasedLocalization;usingMicrosoft.EntityFrameworkCore;usingT5b.Data;AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior",true);varbuilder=WebApplication.CreateBuilder(args);// Add services to the container.builder.Services.AddControllersWithViews(opt=>opt.EnableDefaultErrorMessagesFromResource());builder.Services.AddDbContext<T5bContext>(opt=>opt.UseNpgsql(builder.Configuration.GetConnectionString(nameof(T5bContext))));varapp=builder.Build();// Configure the HTTP request pipeline.if(!app.Environment.IsDevelopment()){app.UseExceptionHandler("/Home/Error");}app.UseStaticFiles();app.UseStatusCodePagesWithReExecute("/Home/AccessError/{0}");app.UseRouting();app.UseAuthorization();app.MapControllerRoute(name:"default",pattern:"{controller=Home}/{action=Index}/{id?}");app.Run();
第01回で説明したように,"{controller=Home}/{action=Index}/{id?}"の部分が
URLとコントローラーのメソッドのマッピングを指定している部分である.この文字列の最後の{id?}の部分が
このアプリで定義しているルーティングパラメーターである.Detailsアクションでは,
表示するべき学生のIDを指定するのにルーティングパラメーターを使用している.これにより
http://localhost:ポート番号/Students/Details/学生のIDというURLにアクセスすることにより,
学生のIDで指定したIDをもつ学生を表示するようにしている.
マッピング定義の文字列の{id?}には?がついているがこれはこのパラメーターが「省略可能」であることを示している.
このURLルーティングの定義の詳細については Routing to controller actions in ASP.NET Core - Microsoft Docs を参考にするとよい.
_のDetails()メソッドの引数も省略可能であることを考慮して, int のNull許容型となっている.
なお, このアクションメソッドの引数名とapp.MapControllerRoute()メソッドで指定したルーティングパラメーター名は
正確に一致させる必要がある .今回はapp.MapControllerRoute()メソッドで"{controller=Home}/{action=Index}/{id?}"と
指定しているため,ルーティングパラメーターの名前はidであり,このため_のDetails()メソッドの
引数名もidにして一致させている.
_の4~5行目ではこの引数が null つまりは指定されていない場合はNotFound()メソッドを呼び出している.
これはクライアントに404 Not Found,つまり「要求されたリソースが見つからない」ということをクライアントに通知するためのHTTPレスポンスを返すメソッドである.