【#4】.NET Core MVC初心者チュートリアル Controllerを作成する

スポンサーリンク
初心者目線で解説するチュートリアル (4) プログラミング

ASP.NET Core MVCを初心者目線で解説するチュートリアルの第4回目です。

目次はこちら

この記事ではControllerを作成します。前回の記事では、文字列を表示するだけのMVCとは関係のないシンプルな.NET Coreプロジェクトを作成しました。実際にWebアプリを作る上で、文字列を表示するだけなんてことはないですよねw

空の.NET CoreプロジェクトをMVCにカスタマイズするためには、Controllerから追加していきます。#1で説明した通り、Controllerの役割はModelとViewの橋渡しです。ModelViewと組み合わせて、結果をユーザーに提供します。とは言っても、コントローラーは、単純なテキストメッセージの配信やユーザーの別の場所へのリダイレクトなど、簡単かつシンプルな動作であれば、単独で実行できます。

プロジェクトに新しいコントローラーを追加する前に、いくつか設定を行う必要がありますので、そちらを先に進めていきましょう。

空の.NET CoreプロジェクトへのMVCサポートの追加

前回の記事で作成した空のテンプレートを引き続き使用します。Controllerを追加する前に、MVCサポートを追加することによって、.NETとWebサーバーに着信要求の処理方法などを設定する必要があります。前に変更したProgram.csファイルを開き、以下のようにコーディングしてください。

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllersWithViews(); //Controllerを使用できるように設定

var app = builder.Build(); //プロジェクトをビルド
if (!app.Environment.IsDevelopment()) 
{
 app.UseExceptionHandler("/Home/Error"); //エラー処理
 app.UseHsts(); 
}
app.UseHttpsRedirection(); //HTTPSの適応に必要な設定
app.UseStaticFiles(); //静的ファイルの有効設定

app.UseRouting(); //ルーティングの設定

app.UseAuthorization(); //認証機能の設定
app.MapControllerRoute(
 name: "default",
 pattern: "{controller=Home}/{action=Index}/{id?}"); //Controllerのルーティング設定

app.Run(); アプリの実行

注目したいのはMapGetの代わりに記述された、MapControllerRouteメソッドです。ルートパターンに”{controller=Home}/{action=Index}/{id?}”と記されていますが、こうすることで、https://localhost/Home/Index/1というようなURLにアクセス出来るようになります。※現時点でアプリを実行してもControllerがないため、エラー画面が表示されます。

Webアプリは、ユーザーからのGET/POSTでのアクセスをControllerに繋げる方法を設定しなければなりません。これがルーティングです。

app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");

アプり実行時にデフォルトでアクセスするルーティングを設定できます。これで、最初のコントローラーを追加する設定が完了しました。

Controllerの追加

MVC関連ファイルはHelloWorldプロジェクト直下など、自由な階層構造で追加できます。しかし、MVCを「Models」「Controllers」「Views」というようなフォルダ構造で管理する方が分かりやすいため、多くのサンプルコードで採用されている方法です。

まずはControllerを追加していくためのフォルダを作成しましょう。HelloWorldプロジェクトを右クリックし、[追加]->[新しいフォルダー]を追加します。

新しいフォルダー

新しいフォルダの名前を 「Controllers」と入力します。次に、新しいフォルダを右クリックして、[追加] ->[コントローラー]を選択します。

MVCコントローラー作成

 

ASP.NET Coreでは、スキャフォールディングを活用できます。

スキャフォールディング…Modelを元に、CRUD(Create/Read/Upadate/Delete)追加、読込、変更、削除を行なうコードを自動で生成する機能のことです。

「読み取り/書き込みアクションがあるMVCコントローラー」「Entity Frameworkを使用したビューがあるMVCコントローラー」はスキャフォールディングでコードを自動生成できますが、今回は学習のためにMVCコントローラー-空」->[追加]ボタンをクリックします。

空のコントローラーを追加

新しいコントローラーの名前を入力するダイアログが表示されたら「HomeController.cs」と入力します。

using Microsoft.AspNetCore.Mvc;
namespace HelloWorld.Controllers
{
 public class HomeController : Controller
 {
  public IActionResult Index()
  {
   return View();
  }
 }
}

HomeControllerはControllerクラスを継承しています。Controllerクラスを継承することでControllerファイルかどうかを認識しているようです。HomeControllerはIndex()という1つのメソッドがあり、Indexアクションと呼ばれます。View()メソッドを呼び出してデフォルトのIndexという名前のViewを返そうとします。現在はViewを作成していないので、最初に作成したプロジェクトと同じようにテキストメッセージを返すContent()メソッドを代わりに用いましょう。

Indexメソッドを以下のように修正します。

public IActionResult Index()
{
    return Content("こんにちは。初心者目線で解説するチュートリアルです。");
}

これで、Index()メソッドを備えたコントローラーができました。以前に適用したデフォルトのルーティング(“{controller=Home}/{action=Index}/{id?}”)のおかげで、プロジェクトの実行時に呼び出されます。では、アプリを実行してみましょう。

Indexメソッドのメッセージ

同様にHomeControllerに他のアクションを追加することもできます。Indexアクションの下に、Createアクションを追加してみましょう

public class HomeController : Controller
{
 public IActionResult Index()
 {
   return Content("こんにちは。初心者目線で解説するチュートリアルです。");
 }
 public IActionResult Create()
 {
   return Content("こんにちは。作成画面です。");
 }
}

アプリを実行し、[!https://localhost:xxxx/Home/Create]へアクセスします。Createメソッドのメッセージ

HomeControllerのCreateアクションによって、メッセージが表示されました。つまり、.NET Core MVCアプリの中ではControllerを作成し、複数のアクションメソッドを持たせることでルーティング(URLごとに機能を振り分ける)ことが可能になります。

ここまでのまとめ

これで、MVCの一部であるControllerが作成されました。Controllerには複数アクションがあり、IndexやCreateアクションを作成できます。Controllerについてまだまだ話したいことはありますが、チュートリアルの後半で追加の解説をしたいと思います。

では、次にViewを学習していきましょう。

次の記事はこちらです。

コメント

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