ASP.Net Core,在控制器中检测调试与不调试

时间:2017-03-14 01:01:54

标签: c# asp.net-core asp.net-core-mvc

我正在编写我的第一个ASP.Net代码Web应用程序,在我的控制器中,我希望有一个if语句来检查我是否处于调试模式。我知道在Startup.cs文件中我可以检查env.IsDevelopment()但这是因为传递了IHostingEnvironment。我无法在普通控制器中找到检查此状态的方法。 ASP.Net Core中是否有一种方法可以检测我在控制器内部何时处于调试模式中?我失踪了?

3 个答案:

答案 0 :(得分:19)

您应该能够将IHostingEnvironment注入您的控制器构造函数。

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();
}

答案 1 :(得分:4)

IHostingEnvironment可让您了解运行应用程序的环境。看起来你需要的是用于构建应用程序的构建配置,即Debug / Release。在ASP.NET Core Web应用程序中,为了在编译时获取此信息,没有直接的方法,但是您可以使用编译器指令进行条件编译的属性,例如

public static bool IsDebug
{
  get
     {
      bool isDebug = false;
    #if DEBUG
       isDebug = true;
    #endif
       return isDebug;
      }
}

在运行时,您可以检查IsDebug属性的值以确定构建配置。我建议将此属性添加到可以从所有控制器访问的公共静态或实用程序类中。

答案 2 :(得分:4)

现在不是IHostingEnvironment,是 IWebHostingEnvironment 。 在ASP.NET Core 3.1中,IHostingEnvironment会引发警告

CS0618  'IHostingEnvironment' is obsolete: 'This type is obsolete 
and will be removed in a future version. 
The recommended alternative is 
Microsoft.AspNetCore.Hosting.IWebHostEnvironment.'

因此,应将接受的答案更新如下:

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();
    }
}