2012-03-29 22 views
8

Actualmente estoy probando un sitio con varios subdominios que apuntan a la misma aplicación ASP.NET, y el enrutamiento maneja qué hacer con cada solicitud.El nombre de host del archivo de host no se devuelve en C# ASP.NET MVC

Para realizar pruebas, he agregado varios subdominios a mi "archivo de hosts", p. "127.0.0.1 admin.TestDomain.com", que funciona bien.

Sin embargo, el problema es que cuando llamo a cualquier función en C# para obtener el nombre de host/dominio/url (HttpContext.Current.Request.Url ...), la URL del host siempre vuelve con "localhost", en lugar de "TestDomain".

¿Alguna idea de por qué este nombre se resuelve de esta manera, y dónde puedo conseguir "TestDomain.com"?

+0

¿Cómo está tratando de "obtener el nombre de host/dominio/url"? –

+0

Probé de muchas maneras, pero todas involucran la clase HttpContext.Current.Request.Url, y no puedo encontrar el "TestDomain" en ninguna parte al inspeccionar esa clase en un corte de depuración. –

+0

Podría ser más específico; mostrarnos una acción de controlador y * exactamente * el código, y * exactamente * qué produce? Además, ¿en qué se está ejecutando cuando obtiene los resultados que menciona? ¿Y qué navegador (s)? Lo pregunto porque no he visto este comportamiento yo mismo, así que me gustaría intentar duplicarlo. –

Respuesta

11

Creo que el host original se pierde después de la asignación del dominio a la dirección IP (localhost) por el sistema operativo local con su archivo "host". Usted puede intentar RawUrl lugar para recuperar la URL exacta mecanografiada en el navegador:

HttpContext.Current.Request.RawUrl 

También puede probar a buscar HTTP_HOST variables de usuario Host: encabezado de solicitud, debe contener huésped original (no abordar o host predeterminado de la servidor) del navegador intenta solicitar:

string requestedDomain = HttpContext.Current.Request.ServerVariables["HTTP_HOST"]; 

Tal Getting parameters from RawUrl artículo será de utilidad.

+0

Lo había considerado yo mismo, pero de la pregunta creo que está usando el enrutamiento de URL que se usa por defecto en ASP.NET MVC. El enrutamiento en realidad no reescribe (como se usa por defecto), y no creo que haya visto un comportamiento similar; Siempre veo exactamente lo que está en la barra de direcciones como 'Host'. ¡Creo! Pero esto definitivamente es algo a lo que hay que prestarle más atención ... –

+0

Un ejemplo de la diferencia entre Enrutamiento y Reescritura: Al utilizar la Reescritura, los Registros de IIS realmente muestran la URL * reescrita *, lo que explica por qué la información en esta respuesta es correcta acerca de reescribiendo El enrutamiento, sin embargo, da como resultado las mismas URL que se muestran en los registros de IIS tal como se solicitó. –

+0

Estoy seguro de que ese problema apareció antes del enrutamiento MVC. Sí, tiene razón, con respecto a la reescritura: en realidad hay * asignación * de dominio a IP = localhost realizada por el sistema operativo local (se corrige, gracias por las notas). El navegador que solicita el host TestDomain.com accedió a 127.0.0.1, luego el servidor de alguna manera cree que es un host local. De todos modos, el encabezado 'Host:' de la solicitud HTTP debe ser original TestDomain.com –

Cuestiones relacionadas