ServiceStack HEAD请求ContentLength未设置

时间:2015-07-08 22:11:30

标签: http servicestack

我正在使用ServiceStack(4.0.31)和mono,我正在使用原始流式传输,这意味着我的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头中包含的元信息应该与响应a发送的信息相同。 GET请求。“

这在ServiceStack中应该很简单,但鉴于我的理解到目前为止它已经证明是困难的。例如,如果我尝试以下内容,它几乎可以提供我想要的内容(对于Head请求响应):

Response.EndRequestWithNoContent();

但是这不起作用,因为它将Content-Length头字段清零,这与RFC(和我的客户端)不一致。如果我不进行此调用,那么当我在设置Content-Length后返回ServiceStack IResponse时,我会在输出中获得默认XML,这也与RFC不一致。此外,我无法修饰我的DTO或设置默认路由不返回XML,因为我必须使用具有公共路由的IRequiresRequestStream。

我可以使用响应过滤器或其他东西告诉ServiceStack这是一个HEAD响应而不是填写XML,但也不能删除我的Content-Length?

1 个答案:

答案 0 :(得分:0)

您可以在不重置Content-Length的情况下结束请求,只需:

Response.EndRequest();