我正在使用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?
答案 0 :(得分:0)
您可以在不重置Content-Length
的情况下结束请求,只需:
Response.EndRequest();