Servicestack自定义RequestBinder仅DTO属性

时间:2013-06-19 12:46:49

标签: servicestack

通常,Servicestack在反序列化作为参数传递的对象时非常有效。

对于在查询字符串上传递的复杂对象,它会查找JSV格式,如解释here

要反序列化在JSV中不在JSV中的查询字符串中传递的复杂DTO,我已在我的AppHost文件中以

的形式注册了自定义请求绑定器
this.RegisterRequestBinder<MyCutommRequestDto>(httpReq => new MyCutommRequestDto()
   {
      Filters = CustomRequestDtoConverter.GetFilters(httpReq.QueryString)
   }
);

在DTO中还有其他属性,我希望其他反序列化将由Servicestack正常完成。这可能吗?

我还想对所有具有相同属性的DTO应用这种反序列化(不同的DTO但都具有Filters属性)。

1 个答案:

答案 0 :(得分:1)

您可以改为使用Request Filter并将通用功能应用于实现共享自定义IHasFilter接口的所有DTO,而不是使用RequestBinder(而不是使用自己的默认请求绑定),例如:

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

这样ServiceStack继续反序列化请求,然后您就可以应用自己的反序列化逻辑了。