2012-03-26 33 views
2

我使用OpenRasta创建了非常简单的HTTP服务。对于HEAD请求,HTTP 1.1规范指出HEAD请求应该将Content-Length设置为“如果请求已成为GET,本来会发送的实体主体的大小”(14.13节)。OpenRasta在HEAD响应中覆盖Content-Length标头

但是,OpenRasta显然看到响应正文为空,并自动将Content-Length标头设置为“0”。

覆盖此行为的推荐方法是什么?

Thanks-

+0

现在,我通过不使用编解码器来处理HEAD请求(由于实际上是在编解码器中设置标头,导致一些代码重复)。相反,我只是在HEAD请求的处理程序中设置头文件,并且不会在响应中返回实体。 – 2012-03-27 17:26:11

回答

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>(); 
} 

在预处理步骤I交换从HEAD HTTP方法,以允许该请求为正常进行处理得到的。

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; 
}  

在流水线结束时,响应标头按预期写入,但没有写入正文。

+0

谢谢 - 我可能会尝试。 – 2012-04-06 12:32:16