【发布时间】:2015-07-09 06:43:16
【问题描述】:
我正在使用带有单声道的 ServiceStack (4.0.31),并且我正在使用原始流,这意味着我的 DTO 是以下形式:
[FallbackRoute("/{Path*}")]
public class S3Request : IRequiresRequestStream{
public string Path{ get; set; }
public Stream RequestStream { get; set; }
}
我实现了所有 HTTP 请求类型:GET、HEAD、POST、PUT、DELETE。我需要 HEAD 做出响应,正如 RFC 2616 中所定义的那样:
“HEAD 方法与 GET 相同,只是服务器不能在响应中返回消息体。响应 HEAD 请求的 HTTP 标头中包含的元信息应该与响应发送的信息相同GET 请求。”
这在 ServiceStack 中应该很简单,但根据我目前的理解,这已被证明是困难的。例如,如果我尝试以下操作,它几乎给了我想要的(对于 Head 请求响应):
Response.EndRequestWithNoContent();
但这不起作用,因为它将 Content-Length 标头字段清零,这与 RFC(和我的客户端)不一致。如果我不进行此调用,那么当我在设置 Content-Length 后返回 ServiceStack IResponse 时,我会在输出中获得默认 XML,这也与 RFC 不一致。此外,我无法装饰我的 DTO 或将路由设置为不返回 XML 的默认值,因为我必须将 IRequiresRequestStream 与公共路由一起使用。
我可以使用响应过滤器或其他方式告诉 ServiceStack 这是一个 HEAD 响应而不填写 XML,但也不删除我的 Content-Length?
【问题讨论】:
标签: http servicestack