しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

ASP.NET MVC 5 アプリケーションの開発を始める時のテンプレート的なものを作った話

昔 ASP.NET MVC 5 で開発を始める上で、自分が定型的に追加している設定をまとめた記事を書きました。

完全に自分用として書いた記事なので、頻繁に読むようになってしまいました。

ぶっちゃけ、自分で MVC 5 アプリケーションを作り始める時に毎回参照しているのも馬鹿らしくなってきたので、GitHub にて色々と設定を追加したテンプレート的な MVC 5 プロジェクトを公開しました。

テンプレートと言いつつ、VSIX 形式にまでは出来ていないので参考にするとかコピペ元にするとか、そういった使い方をしようかと思ってます。

標準のテンプレートとの違い

具体的にこのテンプレートで、どのような設定を追加で行っているかまとめておきます。

  • 最新の ASP.NET MVC 5.2.3 にアップデート
  • RazorViewEngine のみを有効化
  • 認証クッキー名を .ASPXAUTH から auth に変更
  • セッションクッキー名を ASP.NET_SessionId から session に変更
  • CSRF トークンのクッキー名を __RequestVerificationToken から token に変更
  • Attribute Routing のみを使うように
  • URL ルーティングで生成される URL を小文字に
  • レスポンスヘッダに ASP.NET / ASP.NET MVC のバージョン、X-Powered-By を出力しない
  • クライアントサイド検証を無効化
  • エラー画面の表示を IIS 側の設定に統一
  • HTML ヘルパーを少し追加

カスタム HTTP レスポンスヘッダは地味に非表示にしろと言われるので、最初から非表示にしました。

追加した HTML ヘルパー

バリデーションエラーを表示する ValidationSummary ヘルパーの拡張性が全くなく、実際にデザインを当てる場合に不便しかなかったので、部分ビューを使って自由に表示できるようにしています。

ヘルパー名が微妙ですけど、良いのが思いついたらたぶん変更します。

@using (Html.BeginForm())
{
    @Html.ValidationSummaryView("_ErrorView")
    
    @Html.TextBoxFor(m => m.Name)

    <button type="submit">Submit</button>
}

引数にレンダリングする部分ビュー名を指定しておけば、エラーがある場合にはそのビューを使って表示してくれます。エラーがない場合はレンダリング自体を行いません。

エラー表示用のビューはモデルとして ModelError を取ります。

@model IEnumerable<ModelError>

<p>エラーがあります</p>
<ul>
    @foreach (var error in Model)
    {
        <li>@error.ErrorMessage</li>
    }
</ul>

このヘルパーを使ってエラー表示を行った場合には、以下のようになります。

最近行っている開発では、HTML ヘルパー自体をカスタマイズすることが多すぎるので、ある程度の自由度を持たせて楽できるようにしたいですね。

テンプレートは暇なときに更新していきたいと思います。