🐕

ASP.NET MVCアプリ開発の前提

2021/07/11に公開約3,700字

ASP.NET

総じて、ASP.NETとはWebアプリケーションを作成するための技術の総称で、ウェブサイト作成用とウェブサービス作成用の技術に分かれている。

ウェブサイト作成用の技術

ウェブサイトとはサーバーからHTMLを返却しアプリケーションを作成する技術

ウェブサイト 概要
Web Forms HTMLを拡張した豊富なコントロールライブラリを用いて迅速な開発が可能
Web Pages HTMLやC#のようにサーバで実行されるコードを同じファイルに実装する方法 (→ASP.NET CoreでいうところのRazor Pages )
Single Page Apps MVCの発展型でJavaScriptコードでWeb APIを非同期に呼び出すことで画面遷移のないアプリケーション開発が可能
MVC 役割毎にコードを分けることで大規模のアプリケーションでも効率的な開発が可能

ウェブサービス作成用の技術

ウェブサービスとは、エンドユーザからリクエストを受けることはなく、主にクライアントとなるプログラムからリクエストを受ける、サーバーからJSONやXMLを返却する技術

ウェブサービス 概要
Web API 外部プログラムから呼び出してウェブサービスを構築可能にする技術
SignalR サーバ・クライアント間の双方向のリアルタイム通信を可能にする技術

また、ASP.NETは下記に示すような特徴を持つ。

  • Microsoft社が提供するWebアプリケーションフレームワーク
  • 開発環境はWindowsとVisual Studioが必須
  • 開発したWebアプリケーションは.NET Framework上で実行される

.NET Framework

  • Microsoft社が開発した主にWindows対応のアプリケーション実行環境
  • 2019/04/18にリリースされた.NET Framework 4.8が最後のメジャーアップデート

ミドルウェアとの関係性

  • WebサーバのミドルウェアにはApache, Nginx, IISといった種類がある
    • .NET FrameworkIIS上のみで起動するC#のWebアプリケーションフレームワーク

MVC

MVCとは、UIを持つアプリを実装するためのデザインパターンのことでModel, View, Controlerによって構成される。ASP.NETにMVC特有のデザインパターンを適用し効率的なアプリケーション開発が可能になる

Model

  • 扱うデータや関数
  • Contoroller作成前にビルドを通しモデルの内容を反映させる

View

  • 実際に表示される画面👀

Controller

  • ユーザの入力内容を受け取りModel, Viewへの指令に変換する

※ViewModel

  • 実際のテーブル項目と画面に表示する項目との差分を吸収するためテクニック

MVCフロー

ユーザが、WebブラウザでWebアプリケーションにアクセスした際に呼び出されるController内のアクションメソッドがModelを参照し、抽出した値をViewに返却する。

ASP.NET MVCで扱うライブラリや技術

Bootstrap

ASP.NET MVCで生成されたHTMLはBootStrap(Twitterが開発したCSSのフレームワーク)を用いることを想定して作成されているため、優れたUIの実現が期待できる。

Entity FrameWork

  • Microsoftが提供する.NET Frameworkのコンポーネント
  • リストやオブジェクトへの操作をSQL等のDB操作に変換するもので、DBのテーブル行列、キーといった内容を考慮しなくて良いというメリットがある。

migration

  • モデルの変更に伴い、DBの作成・変更を行うための仕組み
PM> Enable-Migrations -EnableAutomaticMigrations
Checking if the context targets an existing database...
Code First Migrations enabled for project "AppName".

実装で扱う知識

コードファーストとDBファースト

  • コードファーストではPOCO(特殊なクラスやI/Fを継承していないクラス)を元にEntity Frameworkがテーブルを作成する。
  • データベースファーストではDBテーブルを元にPOCO(特殊なクラスやI/Fを継承していないクラス)を作成する。
  • 一般的には、作成されたモデルクラス(POCO)を編集することはせず、新たにMetadataクラスを作成し追加情報を付加する方式がとられている。

アクションメソッド

戻り値であるActionResultの派生クラスを介して、その後行うべき挙動をコントローラに通知する。

ビューメソッドとヘルパーメソッド

派生クラス名 ヘルパーメソッド 概要
ViewResult View ActionMethodに対応したViewを出力
RedirectToRouteResult RedirectToAction 指定のアクションメソッドに処理を転送
ContentResult Content 指定されたテキストを出力
FileContentResult File 指定されたファイルを出力
JsonResultResult Json 指定されたオブジェクトをJSON形式で出力
HttpNotFoundResult HttpNotFound 404ページを出力
HttpStatusCodeResult HTTPんステータスコードを返す
EmptyResult 処理を行わない

※ヘルパークラスがないためView演算子でインスタンス生成が必要

CSRF対策(クロスサイトリクエストフォージェリ)

https://www.trendmicro.com/ja_jp/security-intelligence/research-reports/threat-solution/csrf.html

通常はクライアントが入力項目をWebアプリに送信しDBサーバーに格納するが、
攻撃者がクライアントを攻撃ページに誘導しアクセスした時点でWebアプリに入力項目を送信する場合もある。もし、脆弱性を発見した場合はDBサーバーに攻撃内容を送り悪影響を及ぼす可能性がある。

対応策として、アプリケーションサーバーはトークンと呼ばれるランダム文字列を生成し、入力フォームとWebアプリサーバー管理下のセッション(Webサイトにアクセスしたユーザがサイト内で行う一連の操作ログ)を格納する

クライアントがWebブラウザで入力項目を送信した時点でトークンを付随させ、アプリケーションサーバー内のトークンと一致しているか否かを検証しリクエストを処理する

トークンは常にランダムな文字列を生成するので攻撃者が偽のトークンを発行しても一致させない仕組みになっている

パスワードのハッシュ化

  • ハッシュ値=ハッシュ関数(salt + password)
string hash = password;
for (int i=0; i<10000; i++)
{
  hash = hash-method(hash + salt + password)
}

intのnull or bool型

  • int? id
    通常のintにはnullをセットできないがint?はセット可能
    Webブラウザからのリクエスト時にidがnullの際も対応できる
    idがnullなら400コードを返し、それ以外の200コードやリストを返すなどの処理が可能

ASP.NET Core

  • 2016年にASP.NETの次期バージョンであるASP.NET Coreがリリースされる
  • Windows、macOS、Linuxなどの実行環境でも動作できる(クロスプラットフォーム開発可能)オープンソースフレームワーク
  • ASP.NET Coreは約半年毎にアップデートされているが、これまでの業務システム開発に関してはASP.NETの方が実績がある

Discussion

ログインするとコメントできます