(5)RazorのTagヘルパー
project.jsonの中では「Microsoft.AspNetCore.Razor.Tools」というツールも設定されています。このツールを使用すると、Razor用のTagヘルパーにてインテリセンスを有効にできます。
ASP.NET MVCのビュー「Razor」では、新しいTag Helpers(タグヘルパー)という機能が使用できるようになりました。これまでは主にHTMLヘルパーを用いていました
@HTML.LabelFor(m => m.Email, new {@class = "col-md-2"})
Tagヘルパーでは、同じ内容を以下の書き方で書けるようになりました。
<label asp-for="Email" class="col-md2"></label>
Tagヘルパーはモデルのマッピング対象を「asp-for」等の属性で指定するだけで良いため、HTMLのまま直感的に書けるメリットがあります。Labelに限らず、Form、Input、Image、Link、Scriptなど数多くの要素にてTagヘルパーを使用できます。独自のTagヘルパーを作ることもできるので、ぜひ活用してみると良いでしょう。
(6)ASP.NET Coreと連携するIISモジュール「AspNetCoreModule」
前編にてご紹介した通り、ASP.NET Coreでは、Kestrelという新しいWebサーバーが提供されています。Visual Studioのテンプレートでは、project.jsonにてIIS統合機能(Microsoft.AspNetCore.Server.IISIntegration)を使用するようになっており、IISとKestrelを連携することができます。
IISとASP.NET Core(Kestrel)の関係
従来のASP.NETではIISのアプリケーションプール(w3wp.exe)のプロセスに、アプリケーションのDLLを読み込んで動作していました。これに対して、ASP.NET Coreでは、IISとASP.NET Coreはそれぞれ別のプロセスとして動作します。この場合、ブラウザからのリクエストをIISが受け取り、ASP.NET Core(Kestrel)に渡します。
上図のように、IISがリクエストを中継するリバースプロキシの役割を果たし、dotnetコマンドで起動されたASP.NET Coreアプリケーションがメインの処理を行います。
IIS設定「Web.config」
ASP.NET Coreでは「project.json」を使うようになりました。そのため「Web.config」ではプロジェクト設定に関する記載は無くなりましたが、IISに関する設定は引き続き記載します。ここでは、IISで受信したリクエストをAspNetCoreに連携するハンドラ「AspNetCoreモジュール」の設定が記載されています。
<configuration> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/> </handlers> <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/> </system.webServer> </configuration>
前編のproject.jsonで見たように発行後イベントとして「dotnet publish-iis」コマンドが設定されています。これにより、発行が終わると次のようにWeb.configが変更されます。
- 置換前:processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%"
- 置換後:processPath="dotnet" arguments=".¥AspNetCoreSample.dll
これによってアプリの「dllパス」を引数とした「dotnetコマンド」が生成され、IISによってKestrelが起動されます。