2012-03-26 5 views
2

Ich erstelle einen ziemlich einfachen HTTP-Service mit OpenRasta. Für HEAD-Anforderungen gibt die HTTP 1.1-Spezifikation an, dass HEAD-Anforderungen die Inhaltslänge auf "die Größe des Entitätskörpers, der gesendet worden wäre, wenn die Anforderung ein GET gewesen wäre" (Abschnitt 14.13) festgelegt wurde.OpenRasta überschreibt Content-Length-Header in HEAD-Antworten

Offenbar sieht OpenRasta jedoch, dass der Antworttext leer ist und legt den Content-Length-Header automatisch auf "0" fest.

Wie empfiehlt es sich, dieses Verhalten zu überschreiben?

Thanks-

+0

Jetzt handle ich das, indem ich überhaupt keinen Codec für die HEAD-Anfragen verwende (was zu einer Code-Duplizierung führt, da ich tatsächlich Header im Codec gesetzt habe). Stattdessen setze ich einfach die Header im Handler für HEAD-Anfragen und gebe keine Entität in der Antwort zurück. –

Antwort

0

Konfrontiert mit genau diesem Problem war meine Lösung einen IPipelineContributor hinzufügen mit HEAD-Anfragen zu behandeln. Der Teilnehmer initialisiert wurde, wie folgt:

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

In dem Vorverfahren Schritt I die HTTP-Methode von HEAD getauscht zu erhalten, um der Anforderung zu erlauben, als normal verarbeitet werden.

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

Am Ende der Pipeline werden die Antwortheader wie erwartet geschrieben, aber nichts wird in den Text geschrieben.

+0

Danke - das werde ich wahrscheinlich versuchen. –