我正在实现一个RESTful服务,它将由Dojo framewwork的RestStore使用,它将允许将服务绑定到各种小部件,如交互式网格或预先输入类型的ajax选择。
RestStore
想要发送和接收HTTP Range
和Content-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端点很重要。
答案 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");
}
}