LoginSignup
18
23

More than 5 years have passed since last update.

はじめてのASP.NET Core

Posted at

ASP.NET Coreを触り始めているのですが、ASP.NET MVCの知識がなく、Web Formsの知識だけではチュートリアル見ても理解できなくて、なかなか捗りませんでしたが、だんだんと整理できてきたので投稿します。

参考リンク
- Getting started with ASP.NET Core MVC and Visual Studio - ASP.NET Core Documentation

プロジェクトの作成

ファイル - 新規作成 - プロジェクト - 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ベースの方で進めていきます。

次に以下のウィンドウが表示されます。

スクリーンショット 2016-09-23 18.51.36.jpg

デフォルトで、[認証なし]なので、[認証の変更]ボタンを押して、[個別のユーザーアカウント]に変更します。[認証なし]のままプロジェクトを作成すると、スキャフォールディングが使用できません。

スクリーンショット 2016-09-23 18.53.17.jpg

ここで、[認証なし]を選択した場合でも、project.jsonに以下の記述を追加することで、スキャフォールディングが使用できます。

dependenciesセクションに以下を追加する。

project.json
"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セクションに以下を追加する。

project.json
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
  "version": "1.0.0-preview2-final",
  "imports": [
    "portable-net45+win8"
  ]
}

これで、プロジェクトの準備ができました。
このまま実行するだけで、テンプレートのページが表示されます。

Controller

まずは、コントローラーを作ってみます。
Controllersフォルダ内に以下のようなファイルを作成します。
ちなみに、ファイル名の末尾はController.csでなければなりません。

HelloWorldController.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.csConfigureメソッドの以下の部分を変更すれば、初期表示のページを切り替えることができます。

Starup.cs
app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

なお、Starupクラスは、ProgramクラスのMainメソッドから呼ばれます。

ASP.NET Coreの起動順序はこんな感じです。

  1. Program.Main
  2. Startup.ctor
  3. Startup.ConfigureServices
  4. Startup.Configure

詳しくは、Understanding ASP.NET Core Initialization - Telerik Developer Networkが参照してください。

View

次に、ビューを作ります。
先ほどのコントローラーのIndexメソッドを以下に変更します。

HelloWorldController.cs
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も動かせるようになると思います。

18
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
23