2011-12-13 21 views
6

W mojej aplikacji MVC3 mam fabrykę zwyczaj kontrolera, który ma CreateController() metoda działa w następujący sposób:Dlaczego HttpContext nie zawiera nagłówka "Host"?

public IController CreateController(RequestContext requestContext, string controllerName) 
    { 
     string host = requestContext.HttpContext.Request.Headers["Host"]; 
     if(!host.EndsWith(SomeHardcodedString)) { // FAILS HERE 
      //some special action 
     } 
     //proceed with controller creation 
    } 

problem jest host jest null czasami - Widzę NullReferenceException dla niektórych wniosków i punktów śladowych wyjątek stos dokładnie na tym linia.

Dlaczego można pobrać tutaj null? Jak radzić sobie z takimi przypadkami?

+2

Opcja 'nagłówek Host' jest obowiązkowe tylko w HTTP 1.1. Może niektórzy z twoich klientów nadal wykonują żądania przy użyciu protokołu HTTP 1.0? –

+0

@ Frédéric Hamidi: Może. Co mogę zrobić, aby przetworzyć takie żądania? – sharptooth

+3

Zgodnie z [specyfikacją] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23), powinieneś być w stanie zsyntetyzować ten nagłówek z nazwy hosta (i numeru portu, jeśli jakiekolwiek) określone w adresie URL żądania ('Request.Url.Host'). –

Odpowiedz

7

Zastosowanie string host = requestContext.HttpContext.Request.Url.Host;

2

Aby poradzić, może chcesz spróbować czegoś takiego:

var host = requestContext.HttpContext.Request.Url.Host; 

if (host != null) 
    if(!host.EndsWith("SomeHardcodedString")) 
else 
    // Handle it 
Powiązane problemy