2011-12-13 15 views
6

Nella mia applicazione MVC3 Ho una fabbrica di controllo personalizzato che ha CreateController() metodo di lavoro come segue:Perché HttpContext non contiene un'intestazione "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 
    } 

il problema è host è null a volte - Vedo NullReferenceException per alcune richieste ei punti dello stack eccezione traccia esattamente in quel linea.

Perché è possibile recuperare null qui? Come gestisco questi casi?

+2

L'intestazione 'Host' è obbligatoria solo in HTTP 1.1. Forse alcuni dei tuoi clienti stanno ancora eseguendo richieste usando il protocollo HTTP 1.0? –

+0

@ Frédéric Hamidi: Forse. Cosa posso fare per elaborare tali richieste allora? – sharptooth

+3

Secondo [la specifica] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23), dovresti essere in grado di sintetizzare questa intestazione dal nome host (e dal numero di porta, se presente) specificato nell'URL della richiesta ('Request.Url.Host'). –

risposta

7

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

2

di gestirlo, si potrebbe desiderare di provare qualcosa di simile:

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

if (host != null) 
    if(!host.EndsWith("SomeHardcodedString")) 
else 
    // Handle it 
Problemi correlati