Si he logrado localizar y verificar la existencia de un archivo usando Server.MapPath y ahora quiero enviar al usuario directamente a ese archivo, ¿cuál es la forma más fácil de convertir ? esa ruta absoluta volver a una ruta web relativa?Ruta absoluta de regreso a la ruta relativa a la web
Respuesta
Tal vez esto podría funcionar:
String RelativePath = AbsolutePath.Replace(Request.ServerVariables["APPL_PHYSICAL_PATH"], String.Empty);
(estoy usando C#, pero podría adaptarse a vb)
(@ Tags2k: Tengo editted la respuesta anterior)
Esto solo funciona dentro del contexto de una solicitud. – bzlm
@ [GateKiller] (http://stackoverflow.com/questions/3164?sort=oldest#3218): tenga en cuenta que si utiliza los directorios virtuales de IIS en su sitio web, su solución puede fallar porque la ruta física de la aplicación puede ser diferente de la ruta física del archivo. – Costo
Si utilizó Server.MapPath, entonces ya debe tener la trayectoria de la banda relativa. De acuerdo con la MSDN documentation, este método toma una variable, ruta, que es la ruta de acceso virtual del servidor Web. Entonces, si fue capaz de llamar al método, ya debería tener acceso inmediato a la ruta web relativa.
Esto no es necesariamente cierto - la llamada MapPath podría haber sido realizada por otro método y pasado a/llamada de mi método de archivo corrector, o (en mi caso) construido a partir de una serie de elementos diferentes, uno de los cuales es mi directorio de recursos (definido como "~/__ Recursos"). Obviamente, dirigir al usuario a este camino va a generar resultados inesperados. También sería útil saber esto porque a veces la ruta absoluta del archivo podría haberse retirado de la base de datos sin otra información contextual. – tags2k
[@tagsk] (http://stackoverflow.com/questions/3164#3195) - No sé nada de eso. Por cierto que el método está definido, si la cadena que ingresa en Server.MapPath es válida y devuelve una ruta de acceso física al servidor, esta debe haber sido también una ruta virtual válida, independientemente de cómo la haya generado. En cuanto al uso de la tilde (~) al comienzo de una dirección virtual, consulte este artículo de MSDN en [ASP.NET Web Site Paths] (http://msdn.microsoft.com/en-us/library/ms178116.aspx) :> ASP.NET incluye la aplicación web > operador de raíz (~), que se puede utilizar > al especificar una ruta de acceso en el servidor > c –
Yaakov - No es así. Por ejemplo, una función que uso toma una ruta raíz y devuelve una colección 'IEnumerable
¿no sería bueno tener Server.RelativePath (ruta)?
bien, sólo tiene que extenderlo ;-)
public static class ExtensionMethods
{
public static string RelativePath(this HttpServerUtility srv, string path, HttpRequest context)
{
return path.Replace(context.ServerVariables["APPL_PHYSICAL_PATH"], "~/").Replace(@"\", "/");
}
}
Con esto se puede llamar simplemente
Server.RelativePath(path, Request);
un mejor reemplazo para la ruta física sería ~ /. path.Replace (context.ServerVariables ("APPL_PHYSICAL_PATH"), "~ /") –
Sé que esto es viejo, pero que necesitaba para dar cuenta de los directorios virtuales (por El comentario de @ Costo). Esto parece ayudar:
static string RelativeFromAbsolutePath(string path)
{
if(HttpContext.Current != null)
{
var request = HttpContext.Current.Request;
var applicationPath = request.PhysicalApplicationPath;
var virtualDir = request.ApplicationPath;
virtualDir = virtualDir == "/" ? virtualDir : (virtualDir + "/");
return path.Replace(applicationPath, virtualDir).Replace(@"\", "/");
}
throw new InvalidOperationException("We can only map an absolute back to a relative path if an HttpContext is available.");
}
Me gusta la idea de Canoas. Lamentablemente, no tenía disponible "HttpContext.Current.Request" (BundleConfig.cs).
me cambiaron la méthode de esta manera:
public static string RelativePath(this HttpServerUtility srv, string path)
{
return path.Replace(HttpContext.Current.Server.MapPath("~/"), "~/").Replace(@"\", "/");
}
- 1. Ruta absoluta y ruta relativa
- 2. Ruta relativa a la ruta absoluta en VB.NET
- 3. Ruta relativa a la ruta absoluta en C#?
- 4. Cómo convertir ruta relativa a la ruta absoluta en Unix
- 5. Ruta relativa a la ruta absoluta en Elisp
- 6. Ruta de absoluta a relativa (Eclipse, JSP)
- 7. Ruta de archivo absoluta a URL relativa
- 8. ruta absoluta relativa perl
- 9. URL absoluta de la ruta relativa
- 10. Convierta la ruta absoluta a la ruta relativa en el archivo por lotes
- 11. ¿Cómo convertir la ruta absoluta a la ruta relativa en PowerShell?
- 12. En un archivo MAKE, ¿cómo obtener la ruta relativa de una ruta absoluta a otra?
- 13. Obtener URL absoluta de la ruta relativa (método refactorizado)
- 14. utiliza una ruta absoluta o relativa?
- 15. Resolución de una ruta de URL relativa a su ruta absoluta
- 16. ¿Cómo convertir una ruta relativa a una ruta absoluta en una aplicación de Windows?
- 17. Detecta si la ruta es absoluta o relativa
- 18. Transfondo de la ruta relativa a la URL absoluta mediante PHP
- 19. Ruta relativa a un archivo con C#
- 20. ¿Cómo obtener la ruta absoluta del archivo desde la ruta base y relativa que contiene ".."?
- 21. ¿Existe un método en C# para obtener la ruta relativa dado dos entradas de ruta absoluta?
- 22. Cómo quitar la base de una ruta absoluta para obtener una ruta relativa?
- 23. silverlight ... hyperlinkbutton a archivo usando la ruta relativa
- 24. ¿Cómo obtener la ruta absoluta para una ruta relativa dada programáticamente en Linux?
- 25. MSDeploy runCommand utilizando la ruta relativa
- 26. Makefile: amplíe la ruta PREFIX relativa
- 27. WIN32_FIND_DATA - Obtener la ruta absoluta
- 28. Usando Response.Redirect() a una ruta relativa
- 29. problema con la ruta de archivo relativa
- 30. Streamreader a una ruta de archivo relativa
Esta pregunta es de dos años, la capacidad para enviar comentarios no existía en aquel entonces. "GEEZ". – tags2k