Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

929
Vistas
¿Cuál es el equivalente de Server.MapPath en ASP.NET Core?

Tengo esta línea en un código que quiero copiar en mi controlador, pero el compilador se queja de que

El nombre 'Servidor' no existe en el contexto actual

 var UploadPath = Server.MapPath("~/App_Data/uploads")

¿Cómo puedo lograr el equivalente en ASP.NET Core?

over 4 years ago · Santiago Trujillo
4 Respuestas
Responde la pregunta

0

ACTUALIZACIÓN: IHostingEnvironment está en desuso. Ver actualización a continuación.

En Asp.NET Core 2.2 y versiones anteriores, el entorno de alojamiento se ha abstraído mediante la interfaz IHostingEnvironment

La propiedad ContentRootPath le dará acceso a la ruta absoluta a los archivos de contenido de la aplicación.

También puede usar la propiedad, WebRootPath si desea acceder a la ruta raíz del servicio web (carpeta www de forma predeterminada)

Puede inyectar esta dependencia en su controlador y acceder a ella de la siguiente manera:

 public class HomeController : Controller { private readonly IHostingEnvironment _hostingEnvironment; public HomeController(IHostingEnvironment hostingEnvironment) { _hostingEnvironment = hostingEnvironment; } public ActionResult Index() { string webRootPath = _hostingEnvironment.WebRootPath; string contentRootPath = _hostingEnvironment.ContentRootPath; return Content(webRootPath + "\n" + contentRootPath); } }

ACTUALIZACIÓN - .NET CORE 3.0 y superior

IHostingEnvironment se ha marcado como obsoleto con .NET Core 3.0 como lo señaló @ amir133 . Debería usar IWebHostEnvironment en lugar de IHostingEnvironment . Por favor, consulte esa respuesta a continuación .

Microsoft ha segregado cuidadosamente las propiedades del entorno del host entre estas interfaces. Consulte la definición de la interfaz a continuación:

 namespace Microsoft.Extensions.Hosting { public interface IHostEnvironment { string EnvironmentName { get; set; } string ApplicationName { get; set; } string ContentRootPath { get; set; } IFileProvider ContentRootFileProvider { get; set; } } } namespace Microsoft.AspNetCore.Hosting { public interface IWebHostEnvironment : IHostEnvironment { string WebRootPath { get; set; } IFileProvider WebRootFileProvider { get; set; } } }
over 4 years ago · Santiago Trujillo Denunciar

0

.Net 6 (.NetCore 3 y superior)

Por ejemplo, quiero ubicar ~/wwwroot/CSS

 public class YourController : Controller { private readonly IWebHostEnvironment _webHostEnvironment; public YourController (IWebHostEnvironment webHostEnvironment) { _webHostEnvironment= webHostEnvironment; } public IActionResult Index() { string webRootPath = _webHostEnvironment.WebRootPath; string contentRootPath = _webHostEnvironment.ContentRootPath; string path =""; path = Path.Combine(webRootPath , "CSS"); //or path = Path.Combine(contentRootPath , "wwwroot" ,"CSS" ); return View(); } }

algunos trucos

Además, si no tiene un controlador o servicio, siga la última parte y registre su clase como singleton. Luego, en Startup.ConfigureServices:

 services.AddSingleton<your_class_Name>();

Finalmente, inyecte your_class_Name donde lo necesite.


.Net Núcleo 2

Por ejemplo, quiero ubicar ~/wwwroot/CSS

 public class YourController : Controller { private readonly IHostingEnvironment _HostEnvironment; //diference is here : IHostingEnvironment vs I*Web*HostEnvironment public YourController (IHostingEnvironment HostEnvironment) { _HostEnvironment= HostEnvironment; } public ActionResult Index() { string webRootPath = _HostEnvironment.WebRootPath; string contentRootPath = _HostEnvironment.ContentRootPath; string path =""; path = Path.Combine(webRootPath , "CSS"); //or path = Path.Combine(contentRootPath , "wwwroot" ,"CSS" ); return View(); } }

Más detalles

¡Gracias a @Ashin pero IHostingEnvironment está obsoleto en MVC core 3!

de acuerdo a esto :

Tipos obsoletos (advertencia):

 Microsoft.Extensions.Hosting.IHostingEnvironment Microsoft.AspNetCore.Hosting.IHostingEnvironment Microsoft.Extensions.Hosting.IApplicationLifetime Microsoft.AspNetCore.Hosting.IApplicationLifetime Microsoft.Extensions.Hosting.EnvironmentName Microsoft.AspNetCore.Hosting.EnvironmentName

Nuevos tipos:

 Microsoft.Extensions.Hosting.IHostEnvironment Microsoft.AspNetCore.Hosting.IWebHostEnvironment : IHostEnvironment Microsoft.Extensions.Hosting.IHostApplicationLifetime Microsoft.Extensions.Hosting.Environments

Por lo tanto, debe usar IWebHostEnvironment en lugar de IHostingEnvironment .

over 4 years ago · Santiago Trujillo Denunciar

0

utilice, por ejemplo: var fullPath = Path.Combine(Directory.GetCurrentDirectory(), "appsettings.json");

over 4 years ago · Santiago Trujillo Denunciar

0

La sugerencia de la respuesta aceptada es lo suficientemente buena en la mayoría de los escenarios, sin embargo, dado que depende de la inyección de dependencia , se limita a los controladores y las vistas: para tener un reemplazo Server.MapPath adecuado al que se pueda acceder desde clases auxiliares que no sean singleton, podemos agregar las siguientes líneas de código al final del método Configure() del archivo Startup.cs de la aplicación:

 // setup app's root folders AppDomain.CurrentDomain.SetData("ContentRootPath", env.ContentRootPath); AppDomain.CurrentDomain.SetData("WebRootPath", env.WebRootPath);

De esta manera, podremos recuperarlos desde dentro de cualquier clase (incluidos, entre otros, Controladores y Vistas) de la siguiente manera:

 var contentRootPath = (string)AppDomain.CurrentDomain.GetData("ContentRootPath"); var webRootPath = (string)AppDomain.CurrentDomain.GetData("WebRootPath");

Esto se puede explotar aún más para crear un método auxiliar estático que nos permitirá tener la misma funcionalidad que el viejo Server.MapPath :

 public static class MyServer { public static string MapPath(string path) { return Path.Combine( (string)AppDomain.CurrentDomain.GetData("ContentRootPath"), path); } }

Que se puede utilizar de la siguiente manera:

 var docPath = MyServer.MapPath("App_Data/docs");

Para obtener información adicional sobre este enfoque y un poco de historia, echa un vistazo a esta publicación en mi blog.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda