全知全能を目指す人のありがたい雑記

何かしら意味のあるありがた~い話か、意味のない雑念だらけの日記を書く予定です。

ASP.NET MVC5 雑記

Web案件を受けたが、自分はWeb未経験。

なので、サーバーサイドがC#ASP.NETを触ってみることにした。 

プロジェクトについて

App_Startフォルダ

  • AuthConfig
    • OAuth?の認証連携のサポートをするらしい
  • BundleConfig
    • JS,CSSの参照処理
  • FilterConfig
    • 全アクションに対して共通処理を行える
      • trycatchによる例外処理やログ出力に使う
      • バグ調査に使えそう
  • RouteConfig
    • 要求URIとControllerのアクションとの紐づけを行う
  • WebApiConfig
    • RouteConfigのWebAPI版

 

MVCにおけるエントリポイント

Global.asax.cs

MVC

  • Controllerが要求を受ける
    • 他のControllerに渡す場合もある
    • Modelに対して更新を要求する場合もある
  • Modelを要求する
    • Modelが存在しない場合もある
  • ModelをViewに渡す
  • Viewを結果として送信、画面に表示する

View

  • データの表示
  • データの取得・更新などは関知しない(View以外の債務)

ViewBag

ViewとControllerにおけるグローバル変数的な立ち位置

dynamic型

@RenderBody

部分ビューを差し込むキーワード

WebFormにおけるマスターページ

HTMLヘルパー

ActionLinkはよく使いそう

拡張メソッドも定義できて使うなら

System.Mvc.Html名前空間を用いる

https://office-yone.com/technic/asp-net-mvc-htmlhelper/

 

モバイルサイト対応

Viewの拡張子の前に「.mobile」をつければ良いだけ

【例】Index.mobile.cshtml

 

Model

  • 扱うデータやロジックをつかさどる部分
    • データを取得し、加工し、然るべき処理に渡す
    • データの表示には関知しない
  • 更に機能を付加するならpartial classを用いる
    • 更新メソッドや特殊な検索メソッドなどに用いりたい
    • Controller内でLINQで処理できない内容を行う
    • Webサービスへの問い合わせ、書き戻しなど
  • DataAnnotation
    • メタデータを通してクラスやプロパティの情報を伝える
    • System.ComponentModel.DataAnnotations名前空間
    • 必須入力、データ範囲、カラム名、エラーメッセージなど
      • 簡単な内容なら、コードを書かずともDataAnnotationで代用できる
    • コード量が減る

 

Controller

  • ViewとModelの橋渡し部分
    • Modelから受けたデータをViewに渡す
    • ユーザー入力に合わせて処理を行う
    • 橋渡しをする上でアクションと呼ばれるメソッドを使う

アクションフィルター

  • 要求されたアクションに動作をアタッチする
    • 既出のフィルター
      • エラー時のハンドリング
      • 認証要求と未認証ユーザーのブロック
      • 出力のキャッシュ
    • 既出のインターフェイス
      • アクションの認証と承認
      • コントローラーメソッドの実行前と実行後
        • INFOまたはWARNログ
      • 結果表示の前後に実行
      • 例外発生時に実行
        • ERRORログ

WebAPI

  • IHttpActionResultがMVCでいうActionResultに近い
    • OK, BadRequest, NotFoundなどがある
      • それぞれHttpStatusCodeに対応する
      • エラー時の処理が簡便になる

ルーティング

  • ControllerにRoutePrefix属性をつけるとURLの指定を決められる
  • 各メソッドに対してRoute属性をつけるとURLの指定を決められる

メッセージライフサイクル

Webアプリにおける作り

https://blogs.msdn.microsoft.com/chack/2013/02/17/asp-net-web-api-http/

 

Handlerについて

  • アプリ全体ならGlobal.asax.csのGlobalConfiguration.Configuration.MessageHandlers.Addで
  • Route全体ならWebApiConfigのMapRouteを使う

テスト

FiddlerはWebアクセスの試験ができる

Entity Framework

DBアクセスのためのフレームワーク

MVCとEFは親和性が高い

その他

WebFormとの差

  • 基本的な考え方がMVCと異なる
    • 単体テスト
      • 表示とロジックが密に結合されているため
    • 出力されるHTML
  • WebFormの長所
    • 小規模開発

リリース年月日

  • MVC1.0は2009年3月
  • MVC5.0が現在最新で2013年10月

URIとURLの違い

https://ferret-plus.com/4637

 

既存の外部ライブラリ

新規モジュールを入れたいならNuGetを使えば勝手に追加されるっぽい

追加の際は依存関係に気を付けること

 

無暗に最新版モジュールにしない

ファイルに対して更新権限を決めておくと良いらしい

ブラウザのデバッグについて

どのブラウザもF12キーを押すことで開発者ツールを開けるので

積極的に活用すべき

  • html&cssの中身
  • HTTPメソッドのログ

手順書が書ける

Databaseの作成からModelの作成、

スキャフォールディングによるControllerとViewの生成によって

CRUDのアプリケーションが実現できる