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?
L'intestazione 'Host' è obbligatoria solo in HTTP 1.1. Forse alcuni dei tuoi clienti stanno ancora eseguendo richieste usando il protocollo HTTP 1.0? –
@ Frédéric Hamidi: Forse. Cosa posso fare per elaborare tali richieste allora? – sharptooth
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'). –