Estoy escribiendo mi primera aplicación web de código ASP.Net y en mi controlador me gustaría tener una declaración if que verifique si estoy en modo de depuración o no. Sé que en el archivo Startup.cs puedo verificar env.IsDevelopment() pero eso se debe a que se le pasa IHostingEnvironment . No he podido encontrar una manera de verificar este estado dentro de un controlador normal. ¿Hay alguna forma en ASP.Net Core de detectar cuándo estoy en modo de depuración dentro del controlador que me falta?
Actualización : la publicación de @ Pradeep Kumar a continuación es la respuesta más correcta aquí. Esta respuesta solo indica cómo acceder al indicador de entorno IsDevelopment () a través de la inyección de dependencia en un controlador.
Actualización : IHostingEnvironment está obsoleto en .Net Core 3.1, consulte lo siguiente para .Net Core 3.1+ https://stackoverflow.com/a/61703339/2525561
Debería poder simplemente inyectar IHostingEnvironment en el constructor de su controlador.
protected readonly IHostingEnvironment HostingEnvironment; public TestController(IConfiguration configuration, IHostingEnvironment hostingEnv){ this.Configuration = configuration; this.HostingEnvironment = hostingEnv; } [HttpGet] public IActionResult Test(){ if(this.HostingEnvironment.IsDevelopment()){ // Do something } return View(); }IHostingEnvironment le permite conocer el entorno en el que se ejecuta la aplicación. Parece que lo que necesita es la configuración de compilación utilizada para compilar la aplicación, es decir, depurar/liberar. En una aplicación web ASP.NET Core, para obtener esta información en tiempo de compilación, no hay una forma directa, sin embargo, puede tener una propiedad con compilación condicional usando directivas de compilación, algo así como
public static bool IsDebug { get { bool isDebug = false; #if DEBUG isDebug = true; #endif return isDebug; } }En tiempo de ejecución, puede verificar el valor de la propiedad IsDebug para determinar la configuración de compilación. Sugeriría agregar esta propiedad a una clase estática o de utilidad común a la que se pueda acceder desde todos sus controladores.
No es IHostingEnvironment hoy en día, es IWebHostingEnvironment . En ASP.NET Core 3.1, IHostingEnvironment provoca una advertencia
CS0618 'IHostingEnvironment' is obsolete: 'This type is obsolete and will be removed in a future version. The recommended alternative is Microsoft.AspNetCore.Hosting.IWebHostEnvironment.'En consecuencia, la respuesta aceptada debe actualizarse de la siguiente manera:
using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; public class TestController : Controller { protected readonly IWebHostEnvironment HostEnvironment; public TestController(IWebHostEnvironment hostEnv) { this.HostEnvironment = hostEnv; } [HttpGet] public IActionResult Test(){ if (this.HostEnvironment.IsDevelopment()){ // Do something } return View(); } }