我正在使用OpenRasta创建一个非常简单的HTTP服务。对于HEAD请求,HTTP 1.1规范声明HEAD请求应将Content-Length设置为“在请求为GET时已发送的实体主体的大小”(第14.13节)。
但是,OpenRasta显然看到响应正文为空并自动将Content-Length标头设置为“0”。
推荐的覆盖此行为的方法是什么?
谢谢 -
答案 0 :(得分:0)
面对这个问题,我的解决方案是添加一个IPipelineContributor来处理HEAD请求。贡献者初始化如下:
public void Initialize(IPipeline pipelineRunner)
{
// We're going to modify the HTTP method, so allow Rasta to have a go first
pipelineRunner.Notify(PreProcessRequest).After<HttpMethodOverriderContributor>();
}
在预处理步骤中,我将HTTP方法从HEAD交换到GET,以便正常处理请求。
static PipelineContinuation PreProcessRequest(ICommunicationContext arg)
{
if (arg.Request.HttpMethod == "HEAD")
{
// Change the method to GET to allow normal processing
arg.Request.HttpMethod = HttpMethod.GET.ToString();
}
return PipelineContinuation.Continue;
}
在管道的末尾,响应标头按预期写入,但没有任何内容写入正文。