13

Web API が返すモデルを使用して Razor ビューをレンダリングするにはどうすればよいですか? そして、accept ヘッダー (または .extension) が設定されている場合は XML/JSON のみですか? これは可能ですか?

同じモデルで作業している場合、HTML のレンダリング用と JSON/XML 用の別のコントローラーのセットを必要とするのはおかしいと思われます。

更新Darrel Miller は、まだ試していませんが、Razor 用の ViewEngineFormatter を既に作成しています。

4

5 に答える 5

10

同じことをしたかったので、過去にStackOverflowでこれについて同様の質問をしました。しかし、最終的には、「Api」領域とコントローラーのセット、および Web サイト用の MVC コントローラーの標準セットになりました。

後から考えると、これは実際には悪いことではありませんでした。とにかく、コントローラーの各セットで異なることをする傾向があることがわかりました。私のビューは単なる CRUD ではなく、追加のコンテキスト データを含む傾向があるため、そのページに固有のビュー モデルを返すと便利です。

2 つを組み合わせるという目標に固執していたら、コントローラーが複雑すぎるか、ユーザー エクスペリエンスが最適化されていなかった可能性があります。したがって、これはあなたの質問に対する直接的な回答ではありませんが、私の経験では、これができないことはそれほど悪いことではないかもしれません.

代わりに、ほとんどのコントローラーがデリゲートするビルダーとコマンドの豊富なセットができあがりました。そうすれば、API と Web の特定のことを実行しながら、ほとんどのコントローラー ロジックを再利用できます。

http://www.paulstovell.com/clean-aspnet-mvc-controllers

于 2012-05-16T12:00:04.837 に答える
5

はい、それが設計されている方法です:データ用の Web API とレンダリングされたビュー用の MVC。Web API にビュー エンジンのサポートを追加しようとする人がいることは知っていますが、そのように設計されていません。

これに関する私の個人的な見解は、MVC と Web API の間のこの並行世界(コミュニティが一般的に製品を賞賛している一方で、これはほとんどの批判の原因です) は主に、Web API が参照なしで MVC に追加されたという事実の結果です。 (またはそれに関する知識)。

Jon Galloway が最近のポッドキャストで言ったように、チームが現在持っている HTTP の知識を持っていれば (そして、当時は持っていなかった現在の REST API の人気を後から考えると)、データを提供する単一のパイプラインを設計してレンダリングするだけだったでしょう。同じように表示します。

MVC/Web APIの将来のバージョンは、単一のパイプラインとして提供されると推測することしかできません。実際、このパラレルワールドは、近い将来にそれらを統合するための慎重な計画であった可能性があります.

于 2012-05-16T11:09:16.590 に答える
3

同じモデルで作業している場合、HTMLのレンダリング用に1セットのコントローラーを必要とし、JSON/XML用に別のコントローラーセットを必要とするのはおかしなことに思えます。

Web APIはまさにそれが呼ばれるものであり、APIを作成するためのテクノロジーです。

ASP.NET MVCアプリケーションを作成していて、独自の目的でJSONを返したい場合は、コンテンツネゴシエーションなどは必要ありません。したがって、Web APIは必要ありません(昔ながらの優れたJsonResultを使用するだけです)。

Web APIよりも再利用可能なAPIを作成したい場合は必要ですが、クライアントアプリケーションは他の人と同じようにそれを使用する必要があります。

Web APIは、HTML以外のすべてのリクエストを「釘付け」にするための「ハンマー」になることを意図したものではありません。必要なときに使用してください。

于 2012-05-16T10:17:38.143 に答える
3

同じモデルで作業している場合、HTML のレンダリング用と JSON/XML 用の別のコントローラーのセットを要求するのはおかしいと思われます。

AFAIK、それがその方法です。HTML のレンダリングには標準コントローラを使用し、JSON/XML には ApiController を使用する必要があります。

于 2012-05-16T09:55:13.400 に答える