ASP.NET Web APIはweb.configファイルで構成できる?コードベース構成の正しい方法を解説
結論:Web APIはweb.configファイルでは構成できません
いいえ、ASP.NET Web APIはweb.configファイルでは構成できません。Web APIがサポートしているのはコードベースの構成(code-based configuration)であり、web.configファイルによる設定には対応していません。
Web APIでは、ホスティングインフラストラクチャや各種コンポーネントの動作をカスタマイズするために、以下の項目をコード上で構成します。
- ルート(Routes)
- フォーマッター(Formatters)
- フィルター(Filters)
- 依存関係リゾルバー(Dependency Resolver)
- メッセージハンドラー(Message Handlers)
- パラメーターバインディングルール(ParameterBindingRules)
- プロパティ(Properties)
- サービス(Services)
主要コンポーネントの詳細
ルート(Routes)
コントローラーのpublicメソッドは「アクションメソッド」または単に「アクション」と呼ばれます。Web APIフレームワークがリクエストを受け取ると、そのリクエストを適切なアクションへルーティングします。どのアクションを呼び出すかを判断するために、フレームワークはルーティングテーブルを使用します。
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);フォーマッター(Formatters)
ASP.NET Core MVCでは、入力フォーマッターと出力フォーマッターを使ってWeb APIにおけるデータ交換をサポートしています。入力フォーマッターはモデルバインディングに使用され、出力フォーマッターはレスポンスの整形に使用されます。
組み込みのフォーマッターが対応していないコンテンツタイプを扱いたい場合は、カスタムフォーマッターを作成して追加することで対応できます。
フィルター(Filters)
フィルターは、ログ記録、例外処理、パフォーマンス測定、認証・認可といった横断的な関心事(クロスカッティング機能)を実装するために活用できます。
依存関係リゾルバー(Dependency Resolver)
Web APIは、依存関係を解決するためのIDependencyResolverインターフェースを定義しています。これにより、DIコンテナとの連携が可能になります。
メッセージハンドラー(Message Handlers)
メッセージハンドラーは、受信したリクエストがHttpControllerDispatcherに到達する前に、処理・編集・拒否を行う仕組みを提供します。
パラメーターバインディングルール(ParameterBindingRules)
Web APIがコントローラーのメソッドを呼び出す際には、パラメーターに値を設定する必要があります。この一連のプロセスは「バインディング」と呼ばれます。
-
C# ASP.NET WebAPIでCORSの問題を解決する方法を徹底解説
CORS(クロスオリジンリソースシェアリング)とはクロスオリジンリソースシェアリング(Cross-Origin Resource Sharing:CORS)は、追加のHTTPヘッダーを使用して、あるオリジンで動作しているWebアプリケーションに対し、別のオリジンにある選択されたリソースへのアクセスを許可するようブラウザに指示する仕組みです。Webアプリケーションは、自身とは異なるオリジン(ドメイン、プロトコル、ポート)のリソースを要求する際に、クロスオリジンHTTPリクエストを実行します。例として、フロントエンド(UI)とバックエンド(サービス)を持つアプリケーションを考えてみましょう。フロン
-
C# ASP.NET Web APIのアクションメソッドからカスタム結果タイプを返す方法
ASP.NET Web APIでは、IHttpActionResultインターフェースを実装することで、独自のカスタムクラスを結果タイプとして作成できます。IHttpActionResultインターフェースには、HttpResponseMessageインスタンスを非同期に生成する単一のメソッド ExecuteAsync が定義されています。public interface IHttpActionResult { Task<HttpResponseMessage> ExecuteAsync( CancellationToken cancellationToke