ASP.NET Coreを触り始めているのですが、ASP.NET MVCの知識がなく、Web Formsの知識だけではチュートリアル見ても理解できなくて、なかなか捗りませんでしたが、だんだんと整理できてきたので投稿します。
参考リンク
プロジェクトの作成
ファイル - 新規作成 - プロジェクト - ASP.NET Core Web Application (.NET Core)
を選択します。ここでのポイントは、似てるテンプレートがあるので、間違えないことですね。
テンプレート名 | ||
---|---|---|
1 | × | ASP.NET Web Application (.NET Framework) |
2 | ◯ | ASP.NET Core Web Application (.NET Core) |
3 | × | ASP.NET Core Web Application (.NET Framework) |
1番目は、旧来のASP.NETで、2, 3番目がASP.NET Core。
.NET Coreベースと.NET Frameworkベースに分かれてますが、この記事では、.NET Coreベースの方で進めていきます。
次に以下のウィンドウが表示されます。
デフォルトで、[認証なし]なので、[認証の変更]ボタンを押して、[個別のユーザーアカウント]に変更します。[認証なし]のままプロジェクトを作成すると、スキャフォールディングが使用できません。
ここで、[認証なし]を選択した場合でも、project.json
に以下の記述を追加することで、スキャフォールディングが使用できます。
dependencies
セクションに以下を追加する。
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
"version": "1.0.0-preview2-final",
"type": "build"
},
"Microsoft.VisualStudio.Web.CodeGenerators.Mvc": {
"version": "1.0.0-preview2-final",
"type": "build"
}
Tools
セクションに以下を追加する。
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
"version": "1.0.0-preview2-final",
"imports": [
"portable-net45+win8"
]
}
これで、プロジェクトの準備ができました。
このまま実行するだけで、テンプレートのページが表示されます。
Controller
まずは、コントローラーを作ってみます。
Controllers
フォルダ内に以下のようなファイルを作成します。
ちなみに、ファイル名の末尾はController.cs
でなければなりません。
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
namespace MvcMovie.Controllers
{
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public string Index()
{
return "This is my default action...";
}
//
// GET: /HelloWorld/Welcome/
public string Welcome()
{
return "This is the Welcome action method...";
}
}
}
これで実行して、http://localhost:xxxx/HelloWorld
にアクセスすると、This is my defalut action...
と表示されたページが表示できます。
URLは、コントローラークラスのクラス名からController
を削除したものが使われます。
デフォルトでは、そのクラス内のIndex
メソッドが実行されますが、http://localhost:xxxx/HelloWorld/Welcome
とすることで、Welcome
メソッドが実行されThis is the Welcome action method...
と表示されます。
URLのルーティングロジックは以下のとおりです。
/[Controller]/[ActionName]/[Parameters]
また、Startup.cs
のConfigure
メソッドの以下の部分を変更すれば、初期表示のページを切り替えることができます。
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
なお、Starup
クラスは、Program
クラスのMain
メソッドから呼ばれます。
ASP.NET Coreの起動順序はこんな感じです。
- Program.Main
- Startup.ctor
- Startup.ConfigureServices
- Startup.Configure
詳しくは、Understanding ASP.NET Core Initialization - Telerik Developer Networkが参照してください。
View
次に、ビューを作ります。
先ほどのコントローラーのIndex
メソッドを以下に変更します。
public IActionResult Index()
{
return View();
}
次に、Viewsフォルダ内にコントローラと同名(xxxControllerのxxx部分)のフォルダを作成します。
そして、そのフォルダの中に、MVCビューページ
を追加します。
これで、もう一度、http://localhost:xxxx/HelloWorld/
にアクセスすると、作成したビューが表示されるようになります。
なお、メニューなどの複数ページ共通部分は、デフォルトでは、Views/Shared/_Layout.cshtml
で定義されています。
このファイル内の、@RenderBody()
がプレースホルダーになっており、各ページはこの部分に表示されます。
Model
ASP.NET Coreでは、Entity Framework Core(EF Core)
を使用します。EF Coreでは、コードを先に書いて、そのコードからデータベースのテーブルを作成します。これをコードファーストと呼びます。
DbContext
ASP.NET MVCでは、DbContext
クラスを継承したクラスを作成していましたが、ASP.NET Coreのテンプレートには、ApplicationDbContext
というクラスがある(Data
フォルダにある)ので作成不要です。むしろ、作成してしまうと、DbContextが複数あって競合してしまうようです。
Scaffolding
ASP.NET Coreのスキャフォールディングのダイアログで選択するデータコンテキストクラス
は、ApplicationDbContext
を選択します。
ASP.NET MVCでは、これで完了でしたが、ASP.NET Coreでは、スキャフォールディング完了後、コマンドプロンプトで、以下のコマンドを実行してデータベースの初期化を行う必要があります。
dotnet ef migrations add Initial
dotnet ef database update
以上、かなり端折った部分もありますが、自分がASP.NET Coreを触ってハマったところは網羅できました。ASP.NET MVCのチュートリアルが理解できて、この記事を見ればASP.NET Coreも動かせるようになると思います。