需要HTTP标头的REST服务的推荐模式?

时间:2013-02-27 13:39:13

标签: servicestack

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

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

ServiceStack(新API)中作为服务的一部分对HTTP头作出反应的最佳实践模式是什么?通常,像Get这样的服务方法无法访问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端点很重要。

1 个答案:

答案 0 :(得分: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");
    }
}