我正在实现一个 RESTful 服务,该服务将由 Dojo 框架的RestStore 使用,这将允许将服务绑定到各种小部件,如交互式网格或预先输入的 ajax 选择。
RestStore
想要发送和接收 HTTPRange
和Content-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 端点很重要。