mvc - ¿Cuál es la forma más eficiente de realizar el reverso de Server.MapPath en una aplicación ASP.Net?
libro asp.net mvc 5 español (3)
Por el momento no conozco ningún método incorporado para hacerlo, pero no es difícil, lo hago así:
- Necesitamos obtener la raíz de la aplicación y reemplazarla en nuestra nueva ruta con
~
- Necesitamos convertir las barras diagonales inversas a barras oblicuas
public string ReverseMapPath(string path)
{
string appPath = HttpContext.Current.Server.MapPath("~");
string res = string.Format("~{0}", path.Replace(appPath, "").Replace("//", "/"));
return res;
}
Estoy construyendo una aplicación MVC en la que estoy leyendo una lista de archivos del sistema de archivos y quiero pasar la URL relativa a ese archivo a la vista, preferiblemente con el prefijo "~ /" para que cualquier vista que se seleccione, haga que el URL apropiadamente.
Para hacer esto, necesito enumerar los archivos en el sistema de archivos y convertir sus rutas físicas a URLs relativas. Hay algunos algoritmos con los que he experimentado, pero estoy preocupado por la eficiencia y las operaciones de cadena mínimas. Además, creo que no hay nada en .Net Framework que pueda realizar esta operación, pero ¿hay algo en la última versión de MVC que pueda?
¿No es esto lo que hace el método UrlHelper.Content? http://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.content.aspx
Hice algunas excavaciones, tratando de hacer que la clase UrlHelper funcione fuera de un controlador, luego recordé un viejo truco para hacer lo mismo dentro de una página aspx:
string ResolveUrl(string pathWithTilde)
¡Espero que esto ayude! Ver: https://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveurl(v=vs.110).aspx