2

Dojo フレームワークのRestStoreによって消費される RESTful サービスを実装しています。これにより、インタラクティブ グリッドや先行入力 ajax 選択などのさまざまなウィジェットにサービスをバインドできます。

は、クエリの結果を特定のサブレンジに制限するために、HTTPおよびヘッダーRestStoreを送受信したいと考えています。RangeContent-Range

サービスの一部として HTTP ヘッダーに反応するための ServiceStack (新しい API) のベスト プラクティス パターンは何ですか? 通常、Get代替 API を見逃していない限り、このようなサービス メソッドは HTTP ヘッダーにアクセスできません。

私が見る現在の方法は、次のような属性を実装することです

 public class RangeSupporter : Attribute, IHasRequestFilter, IHasResponseFilter

リクエストに応じてヘッダーを解析し、レスポンスにヘッダーを書き込みます。DTO は、このフィルターに対してマークされます。

フィルターは、「最初」と「最後」などの値を DTO の内外に転送します。ただし、DTO にそのような属性があることを知るには、次のようなマーカー インターフェイスが必要です。

interface IHasRangeSupport {
    int First { set; get; }
    int Last { set; get; }
    int Total { set; get; }
}

フィルターが DTO との間で情報を転送できるように、次のようなコードを使用します。

  var r = request as IHasRangeSupport;
  if (r != null) {
      /// Access the DTO attributes for the range parameters
  }

これは多くの式典のようで、非常に厄介な実装です。

REST サービスを実装するときに HTTP ヘッダーにアクセスするためのより良いパターンはありますか?

私の特定のユース ケースでは、REST 以外のエンドポイント (SOAP など) をサポートする必要はありません。HTTP エンドポイントのみが重要です。

4

1 に答える 1

2

サービスの一部として HTTP ヘッダーに反応するための ServiceStack (新しい API) のベスト プラクティス パターンは何ですか?

サービスクラスでヘッダーを取得できると思います...

public class FooService : Service
{
    public object Get(Foo reqeust)
    {
       //get header
       var h1 = base.RequestContext.GetHeader("headerName");
       //get header differently
       var h2 = base.Request.Headers.Get("headerName");
    }
}
于 2013-02-27T17:16:42.927 に答える