2010-03-09 14 views
45

¿Cómo hacerlo?Obtener la ruta de la aplicación sin usar httpcontext. (asp.net)

no quiero usar esto:

HttpContext.Current.Server.MapPath 

¿Hay una función similar que puedo llamar sin necesidad de un HttpContext?

Por ejemplo, si empiezo un hilo haciendo algunas cosas no puedo usar el httpcontext, pero aún necesito obtener la ruta de la aplicación. Y no, no puedo pasar el contexto como argumento o leerlo de una var compartida.

Respuesta

69

Utilice la propiedad HttpRuntime.AppDomainAppPath.

+0

+1 Es bueno saber esto. Gracias. – Saar

+0

Gracias, ni siquiera sabía que esta clase existía. – Tomasi

+2

Es una clase de bajo nivel que la mayoría de las personas no necesita usar. – SLaks

49

Hay varias opciones:

HttpRuntime.AppDomainAppPath

WebApplication  -> Web root folder 
    UnitTest   -> ArgumentNullException 
    ConsoleApplication -> ArgumentNullException 

AppDomain.CurrentDomain.BaseDirectory

WebApplication  -> Web root folder 
    UnitTest   -> ...\AppDir\bin\Debug 
    ConsoleApplication -> ...\AppDir\bin\Debug 

HostingEnvironment.ApplicationPhysicalPath

WebApplication  -> Web root folder 
    UnitTest   -> null 
    ConsoleApplication -> null 

Recomendaría utilizar AppDomain.CurrentDomain.BaseDirectory, porque se puede utilizar en cualquier tipo de proyecto y se puede configurar.

Por ejemplo, puede establecer unittest BaseDirectory señalar la carpeta raíz de la tela del AppDomain.CurrentDomain.BaseDirectory por orden:

AppDomain.CurrentDomain.SetData("APPBASE", "path to your web root"); 
0

me he encontrado con esta pregunta en la búsqueda de manera de calcular una dirección URL (enlaces permanentes en la aplicación web) para proporcionar en algunas notificaciones por correo electrónico.

Estos se generaron en otro subproceso, por lo que HttpContext no estaba disponible y quería evitar poner información relacionada con URL en la tabla de cola utilizada para generar los correos electrónicos.

El código:

public static String GetCurrentAppDomainBasePath(String prefix = "http://") 
{ 
    return String.Format("{0}{1}{2}", 
     prefix, 
     System.Net.Dns.GetHostEntry("").HostName, 
     System.Web.HttpRuntime.AppDomainAppVirtualPath 
    ); 
} 

La función devuelve la ruta de acceso virtual completa como: http://full-host-name/AppName. Por supuesto, existen algunas limitaciones: protocolo codificado (http, https, etc.) y el uso de hostname en lugar de domain name (falla si se definen varios dominios en una sola máquina).

Cuestiones relacionadas