22

他の人が Web API のハイパーメディア リンクを生成する問題にどのように対処したか知りたいです。具体的には、ASP.NET Web API を使用しており、操作でハイパーメディア関連の型を返すか、リソース自体を返すか、パイプラインの後半でハイパーメディアを処理するかで迷っています。つまり、人々は次のようなことをする傾向がありますか?

public Resource<Order> GetOrder(int id) { 
  return new Resource<Order>() {
      Content = new Order(),
      Links = new LinkCollection<Order>() { new AddOrderLink(), new UpdateOrderLink()}
  }

またはもっと似たようなもの

public Order GetOrder(int id) { return new Order(); }

そして、ハイパーメディア リンクを HttpOperationHandler またはカスタム フォーマッタなどに追加しますか?

アプローチが 2 に似ている場合、生成するリンクをどのように知るのでしょうか? すべての Order オブジェクトに対して生成される標準的なリンクのセットがあるだけですか? OrdersController のさまざまな操作を装飾する属性?

4

4 に答える 4

25

私はオプション 2 (パイプラインの後半でハイパーメディア リンクを追加する) を好み、昨日これを行うことについてブログに書きました .

解決策は、メッセージ ハンドラーを使用してリソースがクライアントに返される前に、ハイパーメディア リンクでリソースを「充実」させることでした。

于 2012-09-06T07:32:45.533 に答える
9

githubの Hyprlinkr を使用できます

次のプロジェクトでそれを使用することを計画しています。これは、素晴らしく簡単に実行できることがわかり、nuget パッケージを介して入手できるためです。

于 2012-09-06T01:43:32.830 に答える
2

ASP.NET MVCは Web API の text/html 制約バージョン (手動コンテンツ ネゴシエーションにもかかわらず) と見なされる可能性があるため、この質問に答えるには、これを処理するための ASP.NET MVC アプローチに目を向けることが有益です。 Web API の設計に大きな影響を与えました。

基本的に、カスタム フォーマッタを使用して、ルートまたはアクション属性に基づいて表現を変えることができます。これは、ASP.NET MVC がモデルからビューを分離する方法によって通知されます。ASP.NET MVC プロジェクトでは、1 つのモデルをさまざまなビュー テンプレートでレンダリングできます。これらのビュー テンプレートのそれぞれは、本質的に遷移リンク (アンカー、フォーム、およびリンク要素) をモデルの特定の表現に "ハードコード" します。ビュー テンプレートの選択は、主に規則 (コントローラーとアクション名) によって行われますが、アクションにハードコーディングすることもできます。

ASP.NET MVC のビュー エンジンとビュー検索規則は、カスタム Web API フォーマッタと見なすことができます。これは、サポートされているメディア タイプごとに、カスタム フォーマッタがルートの詳細を使用し、オプションで、呼び出されたアクション メソッドに適用される属性を使用して、リソースの状態を定義するように一般化できます。(この規則の下では、リソースの状態を反映するアクション名を選択することには利点があります。) フォーマッタがリソースの状態を認識すると、状態固有の書式設定コードに委任できます。このコードでは、状態固有のリンクが定義される場所です。

この状態固有の書式設定コードは、Razor ビューが部分ビューの構成をサポートするのとほぼ同じように、他のサブフォーマッターに委任することもできます。

于 2013-02-21T05:07:23.317 に答える