2012-03-26 61 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