ASP.NET MVC についてのメモ
仕事でASP.NET MVCを利用する機会がありました。
1年ほど前にクロスプラットフォーム環境で動作するCoreがリリースされていますが、今回は今更ですがMVCの方です。
ASP.NETはWebフォームが使いづらかったので、もう関わることはないだろうと見限ったのがかれこれ5年ほどくらい前でしたが、このたびMVCを利用したことでASP.NETは使えないという大前提が崩れたので、もしかしたら近いうちに個人で「ASP.NET Core」を利用してみるかもしれません。
以下、ASP.NET MVCで利用した機能などで参考にした記事やリンクのまとめになります。
目次
- モデルに属性の設定
- アクセス制御
- CSRF対策
- ビューエンジン「Razor」
- ルーティング
- O/Rマッパ―「Dapper」
- 最後に
モデルに属性の設定
MVCパターンで一番便利だと思ったのが、このモデルに属性を設定できることでした。
リクエストで送信されたパラメータのチェックや、O/Rマッパ―でマッピングするモデルのテーブル名やマップしないカラムの指定などが簡単にできます。
アクセス制御
ASP.NETではAuthorize属性を利用することで、特定のアクションやコントローラに対してアクセス制御(ロール/ユーザー)を実装することができます。
- Role based Authorization | Microsoft Docs
- authorization - asp.net mvc decorate [Authorize()] with multiple enums - Stack Overflow
下の方のリンクにはロール名にEnumを使用した場合で、複数のロールを設定する方法が掲載されています。
CSRF対策
クロスサイトスクリプティングやSQLインジェクションがどんなものかはすぐに分かるのですが、このクロスサイトリクエストフォージェリ(CSRF)は毎回「なんだったっけ?」と内容を忘れて調べなおしています。
そのCSRFの詳細はこちらで確認してもらうとして、ASP.NET MVCでは非常に簡単な手順でCSRFの対策が可能です。
やっていることは、そのセッションでのみ有効な文字列(トークン)をページに埋め込んで、リクエストで送信されたトークンをサーバ側で検証します。
すでに用意されているメソッドや属性を利用するだけなので、非常に簡単に実装できます。
ビューエンジン「Razor」
ASP.NET MVCでは「Razor」というビューエンジンが提供されています。
ルーティング
最初は「RoutePrefix()」や「Route()」がないと動作しないと思っていたのですが、むしろデフォルトでコントローラー名やアクションメソッド名が利用されているんですね。
O/Rマッパ―「Dapper」
今回はDapperを利用しました。
EF(Entity Framework)すら利用したことがありませんでしたが、多機能なら「EF」、パフォーマンス優先なら「Dapper」という使い分けのようです。
Dapperの特徴としては、クエリビルダがないのでSQLは直接書く必要があって、用意したモデルへのマッピングだけ自動でやってくれるようです。SQLを極力書きたくないといった場合は、他のO/Rマッパーを選択する必要があるみたいです。
最後に
冒頭にも書きましたが、クロスプラットフォーム向けの「ASP.NET Core」というものがリリースされているので、今回の仕事で得た経験を糧にして、ちょっと手を出してみたいですね。