2011-12-13 6 views
6

En mi solicitud MVC3 que tienen una fábrica de controlador personalizado que tiene CreateController() método de trabajo de la siguiente manera:¿Por qué HttpContext no contendría un encabezado "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 
    } 

el problema es host es nulo veces - Veo NullReferenceException para algunas peticiones y los puntos de seguimiento de pila de excepción exactamente en ese línea.

¿Por qué se recuperaría null aquí? ¿Cómo manejo estos casos?

+2

La cabecera 'Host' sólo es obligatoria en HTTP 1.1. Tal vez algunos de sus clientes siguen realizando solicitudes utilizando el protocolo HTTP 1.0? –

+0

@ Frédéric Hamidi: Tal vez. ¿Qué puedo hacer para procesar tales solicitudes? – sharptooth

+3

Según [la especificación] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23), debería poder sintetizar este encabezado a partir del nombre de host (y número de puerto, si corresponde) especificado en la URL de la solicitud ('Request.Url.Host'). –

Respuesta

7

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

2

Para manejarlo, es posible que desee probar algo como:

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

if (host != null) 
    if(!host.EndsWith("SomeHardcodedString")) 
else 
    // Handle it 
Cuestiones relacionadas