Raíz del directorio virtual versus raíz del sitio web predeterminado
-
12-11-2019 - |
Pregunta
Estoy usando iis 5.1 en el que solo tenemos un sitio web predeterminado,
Tengo dos proyectos v2 y v3.
Mi sitio web apunta a proyectos V2 y tiene algunas imágenes de carpetas, estilos, etc. Ahora tengo un directorio virtual en este sitio web que aloja el Proyecto V3 y tiene la misma jerarquía de carpetas que V2
en la página de inicio de ambos proyectos tengo
img src="\images\edlogo.gif" alt="logotipo"/>
pero esto muestra la misma imagen que está en el directorio v2. ¿Cómo puedo mostrar imágenes diferentes para ambos proyectos?usando "\" obtenga la raíz del sitio web, pero ¿cómo puedo obtener la raíz del directorio virtual en ese sitio web?
Solución
Este método estático le devuelve la ruta http completa a la carpeta raíz de su aplicación (sitio web o directorio virtual)
public static string GetAppRootUrl(bool endSlash) {
string host = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority);
string appRootUrl = HttpContext.Current.Request.ApplicationPath;
if (!appRootUrl.EndsWith("/")) //a virtual
{
appRootUrl += "/";
}
if (!endSlash)
{
appRootUrl = appRootUrl.Substring(0, appRootUrl.Length - 1);
}
return host + appRootUrl;
}
Entonces, puedes escribir en tu página:
<img src="<%= Server.HtmlEncode(GetAppRootUrl(false)) %>/images/edlogo.gif" alt="logo"/>
Otros consejos
Utilice las URL relativas.Consulte aquí e.g."Imágenes / bg.jpg" en la página "http://v2/default.html" se apuntará a "http://v2/images/bg.jpg", mientras que el mismo código en la página "http:// v2/v3/default.html "apuntará a" http://v2/v3/images/bg.jpg "
Entonces, su código se convierte en:
img src="images\edlogo.gif" alt="logo"/>
Sin embargo, un efecto secundario desafortunado es que no puede mover su página de inicio en la estructura del directorio de su sitio web sin romper el enlace.
¡Sin embargo, tengo curiosidad por qué elegirías este tipo de configuración?¿No sería más fácil simplemente hacer un sitio web V3 un sitio web y colocarlo en el mismo nivel de directorio que V2?
Hay algo que falta en su publicación, ¿puede publicarlo por favor?
Podrías usar la ruta relativa
<img src="../images/edlogo.gif" alt="logo"/>
La muestra de código siempre lo obtendrá desde el directorio raíz.
Tal vez puedas usar HttpRuntime.AppDomainAppVirtualPath
o Request.ApplicationPath
.
También Page.ResolveUrl("~")
es útil.
Ejemplo de uso para mi directorio virtual /v2
HttpRuntime.AppDomainAppVirtualPath = /v2
Request.ApplicationPath = /v2
Request.FilePath = /v2/Inicio.aspx
GetAppRootUrl(false) = http://localhost:2029/v2
Page.ResolveUrl("~") = /v2/
Revisión
http://msdn.microsoft.com/en-EE. UU. / Library / System.Web.VirtualPathutility.aspx
Revisión
http://msdn.microsoft.com/en-us/library/system.web.httprancst.filepath(v=vs.100).aspx
Public Function GetRoot() As String
Return System.Web.VirtualPathUtility.MakeRelative(Request.FilePath, Request.ApplicationPath)
End Function