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

Mat*_*ete 13 c# asp.net-core-mvc asp.net-core

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

Cod*_*hse 20

您应该能够将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();
}
Run Code Online (Sandbox Code Playgroud)


Pra*_*mar 12

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

public static bool IsDebug
{
  get
     {
      bool isDebug = false;
    #if DEBUG
       isDebug = true;
    #endif
       return isDebug;
      }
}
Run Code Online (Sandbox Code Playgroud)

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


Opt*_*max 8

不是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.'
Run Code Online (Sandbox Code Playgroud)

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

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();
    }
}
Run Code Online (Sandbox Code Playgroud)