2010-02-01 13 views
6

Tengo una aplicación ASP .Net ejecutándose en IIS7. Estoy usando la URL actual en la que se ejecuta el sitio para establecer algunas propiedades estáticas en una clase en mi aplicación. Para hacer esto, estoy recibiendo el nombre de dominio que utiliza este (insde constructor estático de la clase):¿Cómo obtengo el nombre de dominio de host en ASP .NET sin utilizar HttpContext.Current.Request?

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

y funciona bien en mi máquina dev (Windows XP/Cassini). Sin embargo, cuando implemente en IIS7, recibo una excepción: "La solicitud no está disponible en este contexto".

Supongo que es porque estoy usando este código en el constructor estático de un objeto, que se ejecuta en IIS antes de que entren solicitudes; y Cassini no activa el constructor estático hasta que ocurre una solicitud. Ahora, originalmente no me gustaba la idea de sacar el nombre de dominio de la Solicitud por esta misma razón, pero era el único lugar donde lo encontré =)

Entonces, ¿alguien sabe de otro lugar que pueda encontrar? el nombre de dominio de host? Asumo que ASP .Net debe ser consciente de ello en algún nivel independiente de HttpRequests, simplemente no sé cómo acceder a él.

Respuesta

8

La razón por la que el dominio está en la solicitud es ... eso es lo que se solicita. Por ejemplo estos son unos pocos sitios Stackexchange de http://www.stackexchangesites.com/:

Si ellos un ping, verá todos ellos apuntan a la misma IP/Web Servidor y ser atendido por la misma aplicación (o varias aplicaciones en este caso, pero el ejemplo se mantiene si fue uno grande) ... pero la aplicación no sabe cuál hasta que aparezca un host header con la solicitud solicitando el servicio r para ese sitio. Cada solicitud puede ser para un dominio diferente ... por lo que la aplicación no lo sabe.

Sin embargo, si no cambia, puede almacenarlo como una aplicaciónConfiguración en el web.config.

+0

Ah, bien, entonces lo que realmente debería estar haciendo no está inicializando esto en un constructor estático. De hecho, si quiero estar a salvo, ni siquiera debería tener mis valores como estáticos: debería buscarlos de nuevo en cada solicitud, en caso de que recibiera solicitudes de varios dominios (en mi caso, no gané). t, pero es bueno estar al tanto de esto). Gracias por la ayuda. Desafortunadamente, ahora debo refactorizar una parte más grande de esta aplicación heredada de lo que quisiera =) – Badjer

1

Usa global.asax o escribe un HttpModule y suscríbete para iniciar eventos de solicitud. Tendrás la solicitud aprobada en tu controlador de eventos.

Cuestiones relacionadas