2

一般に、Servicestack は、パラメーターとして渡されたオブジェクトの逆シリアル化で非常にうまく機能します。

クエリ文字列で渡された複雑なオブジェクトの場合、ここで説明されているように JSV 形式を探します

JSVではなくクエリ文字列で渡された複雑なDTOを逆シリアル化するために、AppHostファイルにカスタムリクエストバインダーを次の形式で登録しました

this.RegisterRequestBinder<MyCutommRequestDto>(httpReq => new MyCutommRequestDto()
   {
      Filters = CustomRequestDtoConverter.GetFilters(httpReq.QueryString)
   }
);

DTOには他のプロパティもあり、残りの逆シリアル化は通常どおりServicestackによって行われることを望みます。これは可能ですか?

また、同じ種類のプロパティを持つすべての DTO にこの種の逆シリアル化を適用したいと思います (DTO は異なりますが、すべて Filters プロパティがあります)。

4

1 に答える 1

1

RequestBinder (デフォルトの Request Binding を独自のものでオーバーライドする) を使用する代わりに、代わりにRequest FilterIHasFilterを使用して、共有カスタムインターフェイスを実装するすべての DTO に汎用機能を適用できます。

this.RequestFilters.Add((httpReq, httpResp, requestDto) =>
{
    var hasFilter = requestDto as IHasFilter;
    if (hasFilter != null)
    {
        hasFilter.Filters = CustomDtoConverter.GetFilters(httpReq.QueryString);
    }
});

こうすることで、ServiceStack は引き続き Request を逆シリアル化し、後で独自の逆シリアル化ロジックを適用できます。

于 2013-06-19T14:06:55.673 に答える