2009-05-31 15 views
31

¿Cómo sé la ruta virtual completa en la que mi aplicación se encuentra alojada actualmente? Por ejemplo:¿Cómo obtengo la ruta virtual completa de una aplicación ASP.NET?

http://www.mysite.com/myApp 

o

http://www.mysite.com/myApp/mySubApp 

sé la ruta de aplicación de HttpRequest pero sólo devuelve el nombre de la carpeta que mi aplicación se aloja en la actualidad, pero ¿cómo puedo obtener la parte inicial?

Respuesta

71

La parte del nombre de dominio de la ruta no es realmente una propiedad de la aplicación en sí, sino que depende de la URL solicitante. Es posible que pueda llegar a un único sitio web desde diferentes nombres de host. Para obtener el nombre de dominio asociado con la solicitud actual, junto con la ruta de acceso virtual de la aplicación actual, se podría hacer:

Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath 

Técnicamente, una "solicitud" es un directorio virtual definido en IIS y Request.ApplicationPath retornos Exactamente eso. Si desea obtener la carpeta en la que la corriente solicitud se maneja, se puede hacer esto:

VirtualPathUtility.GetDirectory(Request.Path) 

ASP.NET no tiene idea de cómo distinguir su sub-aplicación desde una aplicación más grande si no se define como un directorio virtual en IIS. Sin registrarse en IIS, solo lo ve como una aplicación única.

+2

Y si la aplicación es un directorio virtual en IIS, pero la página que estamos solicitado está dentro de varias carpetas, pero queremos ruta que incluya el directorio virtual, pero no carpetas, cómo hacer esto ? – Krunal

+1

@Krunal [HttpRuntime.AppDomainAppVirtualPath] (https://msdn.microsoft.com/en-us/library/system.web.httpruntime.appdomainappvirtualpath (v = vs.110) .aspx) o Request.ApplicationPath – jproch

2

probar este (no lo he probado)

public string GetVirtualPath(string physicalPath) 
{ 
string rootpath = Server.MapPath("~/"); 
physicalPath = physicalPath.Replace(rootpath, ""); 
physicalPath = physicalPath.Replace("\\", "/"); 
return "~/" + physicalPath; 
} 

Link 1

Link 2

1

Para responder plenamente a esta pregunta creo que es necesario para describir lo que su realidad tratando de hacer y lo que es haciendo que su valor de ruta sea "desconocido"

Normalmente cuando me encuentro con Path encuentra problemas con esta publicación del blog de Rick Strahl cle Ars cosas para mí: http://www.west-wind.com/weblog/posts/269.aspx

Podría tener que mezclar y combinar para obtener lo que desea.

+0

El vínculo se rompe –

18
Request.Url 

que contiene varios puntos que usted podría considerar utilizar, ver la imagen de abajo:

enter image description here

3

El código de abajo va a resolver el propósito, sin embargo hay que hacer una afinación poco para dos tipos de escenarios:

  1. Alojado como aplicación web por separado.
  2. Alojado como aplicación virtual dentro de una aplicación web.

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

6

En .NET 4.5

VirtualPathUtility.ToAppRelative(path) 
Cuestiones relacionadas