2012-03-26 3 views
2

OpenRasta를 사용하여 매우 간단한 HTTP 서비스를 만들고 있습니다. HEAD 요청의 경우, HEAD 요청은 Content-Length가 "요청이 GET 인 경우 전송되었을 Entity-Body의 크기"로 설정되어야한다는 HTTP 1.1 사양이 있습니다 (14.13 절).OpenRasta가 HEAD 응답의 Content-Length 헤더를 덮어 씁니다.

그러나 OpenRasta는 응답 본문이 비어 있음을 확인하고 자동으로 Content-Length 헤더를 "0"으로 설정합니다.

이 동작을 재정의하는 권장 방법은 무엇입니까?

바로이 문제에 직면

+0

현재로서는 HEAD 요청에 코덱을 전혀 사용하지 않아서 처리하고 있습니다. 실제로 코덱에 헤더를 설정했기 때문에 일부 코드가 중복됩니다. 대신 HEAD 요청에 대한 핸들러에서 헤더를 설정하고 응답에서 엔티티를 리턴하지 않습니다. –

답변

0

고맙다 - 내 솔루션은 HEAD 요청을 처리 할 수있는 IPipelineContributor을 추가했다. I 요청이 정상적으로 처리 될 수 있도록하기 위해 드릴 선두로부터 HTTP 메소드를 교환 전 공정에서

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

다음과 같이 초기화 기여 하였다.

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

감사합니다. 아마도 시도해 보겠습니다. –