2012-05-15 14 views
6

Dentro de la Application_Start de mi Global.asax.cs, estoy tratando de obtener la ruta actual de la aplicación usando:El actual Ruta de la aplicación virtual en ASP.Net

var virtualPath = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) 
          + HttpRuntime.AppDomainAppVirtualPath; 

Esto devolverá por ejemplo: http://localhost:99/MySite/

voy a continuación, utilizar esta URL y haga lo siguiente:

var pageToHit = virtualPath + Pages\MyOtherPage.aspx 
var client = new WebClient(); 
client.DownloadData(dummyPageUrl); 

Todo esto está muy bien cuando corro el proyecto en IIS 6 o el Visual Studio incorporada en el servidor web, sin embargo, las cosas se vuelven locas en IIS 7 cuando obtengo una "System.Web.HttpException: la solicitud no está disponible en este contexto".

Soy consciente de este tema: Request is not available in this context

Sin embargo, me preguntaba si alguien tenía alguna idea sobre cómo hacer lo anterior sin cambiar el proyecto se ejecute en modo clásico.

+0

Además, esto parece ser un duplicado de Cómo obtener el nombre de host completo + número de puerto en Application_Start of Global.aspx? pregunta: http://stackoverflow.com/questions/4243270/how-to-get-full-host-name-port-number-in-application-start-of-global-aspx – JamieSee

Respuesta

5

No se puede acceder a la URL absoluta de la solicitud actual dentro de Application_Start cuando se ejecuta en modo integrado. Puede acceder al nombre de la ruta virtual usando HostingEnvironment.ApplicationVirtualPath pero no es una URL absoluta. Aquí está an article que explica una solución común. Como se explica en el artículo que tiene 2 posibilidades:

  1. Cambiar el código de aplicación a no usar el contexto de la petición (recomendado)
  2. Realizar la inicialización en Application_BeginRequest usando una cerradura y un conjunto unitario para asegurar que esta inicialización se lleva a cabo solo una vez durante toda la vida del AppDomain. Aquí hay un similar thread discutiendo este segundo enfoque.
+0

bien, ¿hay alguna manera de servir a un página manualmente? por ejemplo var client = new WebClient(); client.DownloadData (Pages \ DummyPage.aspx) – MaYaN

+0

No, el método WebClient requiere una URL absoluta. –

+0

Ya veo. ahora el problema en Application_BeginRequest es que una vez que se inicia la aplicación, el evento _BeginRequest no se activa hasta que el usuario aterrice en cualquiera de las páginas. Ese es un problema, ya que necesito acceder a la página tan pronto como se inicia la aplicación. – MaYaN

Cuestiones relacionadas