---
# System prepended metadata

title: ASP.NET Core の 基礎（全体像） 2021-09-04
tags: [基礎, 全体像, ASP.NET Core]

---

---
lang: ja-jp
breaks: true
---
# ASP.NET Core の 基礎（全体像） 2021-09-04

> ASP.NET Core の概要
> https://docs.microsoft.com/ja-jp/aspnet/core/introduction-to-aspnet-core

> ASP.NET 4.x と ASP.NET Core の選択
> https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/choose-aspnet-framework

> ASP.NET Core の基礎
> https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/

## 概要

ASP.NET Core アプリは、サーバーの起動時に起動し、クラッシュした場合には再起動する必要があるコンソール アプリです。
インターネットに接続された最新のクラウド対応アプリを構築するための、クロス プラットフォームで高パフォーマンスのオープン ソース フレームワークです。

## ホストする機能

* Kestrel
* IIS
* HTTP.sys
* Nginx
* Apache
* Docker

## ASP.NET Core のシナリオ

* Web サイト（Webアプリ）
    * Razor ページ
        ※Razor ページを利用することで、ページのコーディングに今まで以上に集中できます。また、コントローラーとビューを使用する場合より生産的になります。
    * MVC
        ASP.NET Core MVC は、モデル ビュー コントローラー デザイン パターンを使用して、Web アプリと API をビルドするための豊富なフレームワークです
    * Blazor
        Blazor は、.NET を使って対話型のクライアント側 Web UI を構築するためのフレームワークです。
* API（Web API アプリ）
    ASP.NET Core では、C# を使った RESTful サービス (別名: Web API) の作成がサポートされています。
    * Swagger/OpenAPI Web API のドキュメントのサポート
        Swagger (OpenAPI) は REST API を記述するための仕様であり、言語に依存しません。 これにより、コンピューターと人間の両方が、ソース コードに直接アクセスせずに REST API の機能を理解できるようになります。
* リアルタイムアプリ
    * SignalR
        SignalR は、サーバー間リモート プロシージャ コール (RPC) を作成するための API を提供します。
    * MessagePack ハブプロトコル
        SignalR には、MessagePack 形式のサポートが組み込まれており、クライアントとサーバーが使用する Api が用意されています。
    * ストリーミング
        クライアントからサーバーへのストリーミングと、サーバーからクライアントへのストリーミングがサポートされています。
    * Websocket
        WebSocket (RFC 6455) は、TCP 接続を使用した双方向の永続的通信チャネルを有効にするプロトコルです。ほとんどのシナリオで、生の WebSocket よりも SignalR が推奨されます。
* リモート プロシージャ コール　アプリ
    * gRPC
        gRPC は言語に依存しない高性能なリモート プロシージャ コール (RPC) フレームワークです。
* Azure に ASP.NET Core アプリをデプロイする

## Web Framework Benchmarks

https://www.techempower.com/benchmarks/#hw=ph&test=plaintext

![](https://i.imgur.com/eSasj7l.png)

## Startup クラス

アプリで必要なサービスを構成する。

> ASP.NET Core でのアプリケーションのスタートアップ
> https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/startup

## 依存性の注入 (サービス)

構成済みのサービスをアプリ全体で利用できるようにする依存性の注入 (DI) フレームワークが組み込まれています。 たとえば、ログ コンポーネントは、サービスです。

サービスは通常、コンストラクター挿入を使用して DI から解決されます。 コンストラクター挿入では、必要な型またはインターフェイスのコンストラクター パラメーターがクラスで宣言されます。 DI フレームワークでは、実行時にこのサービスのインスタンスが提供されます。

> ASP.NET Core での依存関係の挿入
> https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/dependency-injection

## ミドルウェア

要求を処理するパイプラインは、一連のミドルウェア コンポーネントとして構成されています。 各コンポーネントによって、`HttpContext` に対して操作が実行され、パイプラインの次のミドルウェアが呼び出されるか、または要求が終了されます。

> ASP.NET Core のミドルウェア
> https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/middleware


## Host

起動時に、ASP.NET Core アプリによって ホスト がビルドされます。 ホストにより、次のようなアプリのすべてのリソースがカプセル化されます。

* HTTP サーバーの実装
* ミドルウェア コンポーネント
* ログの記録
* 依存性の注入 (DI) サービス
* 構成

2 つの異なるホストがあります。

* .NET での汎用ホスト
    > ASP.NET Core の .NET 汎用ホスト
    > https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/host/generic-host

* ASP.NET Core の Web ホスト
    > ASP.NET Core の Web ホスト
    > https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/host/web-host
    :::warning
    ASP.NET Core の Web ホストは、下位互換性のためにのみ使用できます。
    :::


## サーバー

ASP.NET Core アプリは、HTTP 要求をリッスンするために HTTP サーバー実装を使用します。 サーバーは、HttpContext に構成した要求機能のセットとして、アプリへの要求を公開します。

ASP.NET Core では、次のサーバー実装が提供されます。

* Kestrel は、クロスプラットフォームの Web サーバーです。 Kestrel は IIS を使用してリバース プロキシ構成で実行されることがよくあります。 Kestrel は、ASP.NET Core 2.0 以降で、インターネットに直接公開される一般向けエッジ サーバーとして実行することもできます。
    :::info
    Windows、Max、Linuxに対応。
    Kestrel は Nginx または Apache を使用してリバース プロキシ構成で実行されることがよくあります。
    :::

* IIS HTTP サーバー は、IIS を使用する Windows のサーバーです。 このサーバーでは、ASP.NET Core アプリと IIS が同じプロセスで実行されます。
    :::info
    Windows のみ
    :::

* HTTP.sys は、IIS とは一緒に使用しない Windows のサーバーです。
    :::info
    Windows のみ
    :::

> ASP.NET Core での Web サーバーの実装
> https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/servers/

## 構成

> ASP.NET Core の構成
> https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/configuration/

## 環境

`Development`、`Staging`、`Production` などの実行環境は ASP.NET Core の最上の概念です。 アプリが実行している環境は、`ASPNETCORE_ENVIRONMENT` 環境変数を設定することにより指定します。 ASP.NET Core は、アプリの起動時にその環境変数を読み取り、その値を `IWebHostEnvironment` 実装に格納します。 この実装は、依存性の注入 (DI) を介して、アプリ内の任意の場所で使用できます。


> ASP.NET Core で複数の環境を使用する
> https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/environments

## ログの記録

* コンソール
* デバッグ
* Event Tracing on Windows
* Windows イベント ログ
* TraceSource
* Azure App Service
* Azure Application Insights

> .NET Core および ASP.NET Core でのログ記録
> https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/logging

## ルーティング

ルート とは、ハンドラーにマップされている URL のパターンです。 このハンドラーは一般的には Razor ページ、MVC コントローラーのアクション メソッドまたはミドルウェアです。 ASP.NET Core のルーティングでは、アプリで使用する URL を制御できます。

> ASP.NET Core のルーティング
> https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/routing


## エラー処理

* 開発者例外ページ
* カスタム エラー ページ
* 静的状態コード ページ
* 起動時の例外処理

> ASP.NET Core のエラーを処理する
> https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/error-handling


## HTTP 要求を行う

HttpClient インスタンスの作成に、IHttpClientFactory の実装を使用できます。

> ASP.NET Core で IHttpClientFactory を使用して HTTP 要求を行う
> https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/http-requests

## コンテンツ ルート

コンテンツ ルートは、以下に対する基本パスです。

* アプリをホストしている実行可能ファイル ( .exe)。
* アプリを構成するコンパイル済みアセンブリ ( .dll)。
* 次のような、アプリで使用されるコンテンツ ファイル。
    * Razor ファイル ( .cshtml、 .razor)
    * 構成ファイル ( .json、 .xml)
    * データ ファイル ( .db)
* Web ルート (通常は wwwroot フォルダー)。

## Web ルート

Web ルートは、次のような、パブリックで静的なリソース ファイルへの基本パスです。

* スタイルシート ( .css)
* JavaScript ( .js)
* 画像 ( .png、jpg)

> ASP.NET Core の静的ファイル
> https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/static-files

###### tags: `ASP.NET Core` `基礎` `全体像`
