Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

928
Views
¿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 answers
Answer question

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 Report

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 Report

0

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

over 4 years ago · Santiago Trujillo Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!