クライアントスクリプトが重いASP.NET MVCアプリケーションを構築しています。JSONとjQueryを使用してDOMを操作します。
私の理解では、Web APIコントローラーとMVCコントローラーの両方がJSONを返すことができます。
私のシナリオでは、Web APIコントローラーまたはMVCコントローラーを使用する必要がありますか?
クライアントスクリプトが重いASP.NET MVCアプリケーションを構築しています。JSONとjQueryを使用してDOMを操作します。
私の理解では、Web APIコントローラーとMVCコントローラーの両方がJSONを返すことができます。
私のシナリオでは、Web APIコントローラーまたはMVCコントローラーを使用する必要がありますか?
回答:
Web APIコントローラーは、MVCアプリケーションだけでなく、任意のASP.NETアプリケーションで作成およびホストできます。したがって、Web APIを作成する明らかな理由は、MVCフロントエンドがない場合です(たとえば、会社/組織によってホストされている従来のRESTful Webサービス)。
MVCコントローラーは通常、MVCフレームワークに依存します。デフォルトのテンプレートと、コミュニティやピアが行うほとんどの作業を見ると、ほとんどすべてのMVCコントローラーがビューを考慮して実装されていることがわかります。
個人的には、View()で応答する場合はMVCコントローラーを使用し、特定のビューに依存しないものにはWeb APIを使用します。
もちろん注意点がありますが、一般的に言えば、MVCのモデルバインディング動作が必要ない場合、サービスはデータ中心であり、操作はデータ中心(CRUD操作など)であり、「Web APIコントローラー'' Model-View Controller 'の代わりに。逆に、操作がビュー中心である場合(たとえば、ユーザー管理ページをユーザーに配信する場合)、または「ajaxパーシャル」を生成するためにMVCのモデルバインディングが必要な場合(ほとんどありません)、代わりにMVCコントローラーが必要になります。
個人的には、JSONベースのRESTfulクライアントを駆動するためにWeb APIコントローラーを使用し、SPAの基本的なブラウザールーティングと配信を処理するためにMVCコントローラーを使用しています。
WebAPIはAPIを作成するためのものです。XML、JSONなどでAPIを利用できるようにしたい場合は、Web APIを作成できます。
あなたのケースでは、JSONでクライアントと話す必要があるだけです。
あなたのウェブサイトは主にクライアントスクリプト駆動型ですが、ASP.NET MVCコントローラーを使用しているでしょうか?また、エンティティに基づいてコントローラーをすでに論理的に分割している可能性があるため、Web API専用の別のクラスを作成するのではなく、それらのjsonサービスメソッドを追加することは理にかなっています。
だからあなたの特定の状況(私が正しく理解しているなら)のために、私はコントローラーにこだわります。
ApiControllerに関する唯一の懸念は、エリアベースではなくサイトベースであるということです。1つのサイトには、コントローラーメソッドに名前を付けるためのapicontrollerサブフォルダーを1つだけ持つことができます。別の領域でコントローラー名を複製したい場合があります。
domain.com/api/area1/controller1/
domain.com/api/area2/controller1/
これを行うにはいくつかのカスタムコード設定があることを覚えていますが、デフォルトでは機能しません。
私はショーン・ウィルソンの(トップアンサー)の回答に同意しますが、私が少し混乱していて、次の(おそらく正しくない)予知で理解しようとしているので、理由はわかりません-
Shaunの回答の最後の行に「基本的なブラウザーのルーティングとSPAの配信を処理するためにMVCコントローラーを使用している」と記載されているため、私はここがどのように間違っているのかわからず混乱しています。-JSON形式で応答を受信するJavaScriptメソッドである可能性があると想定した場合、私は静止クライアントが何であるかを完全には知りません。これは、私の質問への回答としてリモートで関連していたStackoverflowの最も近い投稿なので、質問を複製する代わりにこの投稿に回答します。
このシナリオでは、JavaScriptなどのリクエストに基づいてこのようなデータを転送するのに最適なWebApiをお勧めします。私は通常、WebApiコントローラーを開発して、JavaScriptで簡単に解析できるJSON対応オブジェクトを返すようにします。
この種のことのためにMVCコントローラーでアクションを使用する唯一のリアルタイムは、HTMLを生成し、ページのセグメントをJavaScript呼び出しで置き換える場合です。
例えば:
選択すると、選択した日のイベントを表すラジオボタンのリストを生成するJQuery UI Datepickerがあります。
このシナリオでは、WebApiを使用して一部のJSONを返し、JavaScriptを使用して必要なHTMLを生成できますが、通常、JavaScriptを使用して大量のHTMLを作成することはお勧めできません。C#でHTMLを作成し、部分ビューを介して返すようにすると、JavaScript解析でエラーが発生する可能性が低くなるため、はるかに優れています。言うまでもなく、これによりHTMLの記述がはるかに簡単になります。