2

我正在实现一个 RESTful 服务,该服务将由 Dojo 框架的RestStore 使用,这将允许将服务绑定到各种小部件,如交互式网格或预先输入的 ajax 选择。

RestStore想要发送和接收 HTTPRangeContent-Range标头,以便将查询结果限制在特定子范围内。

ServiceStack(新 API)中将 HTTP 标头作为服务的一部分做出反应的最佳实践模式是什么?通常,服务方法 likeGet无法访问 HTTP 标头,除非我错过了备用 API。

我看到的当前方式是实现一个属性,例如

 public class RangeSupporter : Attribute, IHasRequestFilter, IHasResponseFilter

它将根据请求解析标头,并在响应时写入标头。然后将为该过滤器标记 DTO。

过滤器会将值(例如“First”和“Last”)传入和传出 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

ServiceStack(新 API)中将 HTTP 标头作为服务的一部分做出反应的最佳实践模式是什么?

我相信你可以在你的服务类中获得标题......

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 回答