ASP.NET MVC 4 ベータ版を試してみたところ、現在 と の 2 種類のコントローラーがあることがわかりましたApiController
。Controller
どのような状況で特定のコントローラーを選択できるのか少し混乱しています。
たとえば、ビューを返す場合は、 またはApiController
通常の を使用する必要がありますかController
? WCF Web API が MVC と統合されたことは承知しています。
今は両方のコントローラーが使用できるので、どの状況で対応するコントローラーを使用すればよいのか教えていただけますか。
ベストアンサー1
通常のビューをレンダリングするには、コントローラーを使用します。ApiController アクションは、シリアル化されてクライアントに送信されるデータのみを返します。
引用:
注: ASP.NET MVC を使用したことがある場合は、コントローラーについては既によくご存知でしょう。コントローラーは Web API でも同様に動作しますが、Web API のコントローラーは、Controller クラスではなく ApiController クラスから派生します。最初に気付く大きな違いは、Web API コントローラーのアクションはビューを返すのではなく、データを返すことです。
ApiController はデータを返すことに特化しています。たとえば、クライアントが要求した形式にデータを透過的にシリアル化します。また、デフォルトでは異なるルーティング スキーム (URL をアクションにマッピングするなど) に従い、慣例的に RESTful API を提供します。
多少の手動コーディングで、ApiController の代わりに Controller を使用すれば、おそらく何でもできるでしょう。結局のところ、どちらのコントローラーも ASP.NET 基盤の上に構築されています。しかし、RESTful API を持つことは今日では一般的な要件であるため、WebAPI はそのような API の実装を簡素化するために作成されました。
2 つのどちらを選ぶかは簡単です。HTML ベースの Web/インターネット/イントラネット アプリケーションを作成する場合 (場合によっては、AJAX 呼び出しで json を返す)、MVC/コントローラーを使用します。システムにデータ駆動型/REST フル インターフェイスを提供する場合は、WebAPI を使用します。もちろん、両方を組み合わせて、MVC ページからの AJAX 呼び出しを ApiController で処理することもできます。
実際の例を挙げると、私は現在、エンティティに REST フル API を提供する ERP システムに取り組んでいます。この API には、WebAPI が適しています。同時に、ERP システムは、REST フル API のクエリを作成するために使用できる、高度に AJAX 化された Web アプリケーションを提供します。Web アプリケーション自体は、WebAPI を使用してメタデータなどを取得することで、MVC アプリケーションとして実装できます。