在视图中确定ASP.NET Core环境名称

Nik*_*tov 41 view environment-variables asp.net-core-mvc asp.net-core

新的ASP.NET Core框架使我们能够为不同的环境执行不同的html:

<environment names="Development">
    <link rel="stylesheet" href="~/lib/material-design-lite/material.css" />
    <link rel="stylesheet" href="~/css/site.css" />
</environment>
<environment names="Staging,Production">
    <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.0.0/css/bootstrap.min.css"
          asp-fallback-href="~/lib/material-design-lite/material.min.css"
          asp-fallback-test-class="hidden" asp-fallback-test-property="visibility" asp-fallback-test-value="hidden"/>
    <link rel="stylesheet" href="~/css/site.css" asp-append-version="true"/>
</environment>
Run Code Online (Sandbox Code Playgroud)

但是,如何在_Layout.cshtml ASP.NET Core MVC Web应用程序中确定和可视化当前环境的名称

例如,我想将环境名称(Production,Staging,Dev)可视化为HTML注释,以便进行调试:

<!-- Environment name: @......... -->
Run Code Online (Sandbox Code Playgroud)

Kir*_*lla 69

您可以IHostingEnvironment通过执行
@inject Microsoft.AspNetCore.Hosting.IHostingEnvironment hostingEnv
操作在视图中注入服务@hostingEnv.EnvironmentName

  • 显然在 ASP.NET Core 3 中,它是 @inject Microsoft.AspNetCore.Hosting.IWebHostEnvironmentHostingEnv (14认同)

Rub*_*nov 17

从.NET Core 3.1开始推荐使用

@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnv
Run Code Online (Sandbox Code Playgroud)

将其添加到 Razor 视图的顶部。您可以使用@hostingEnv.EnvironmentName来获取当前环境。


Sim*_*ver 12

为了验证我刚刚制作了一个简单的API控制器

[Route("api/[controller]")]
public class DebugController : Controller
{
    private IHostingEnvironment _hostingEnv;

    public DebugController(IHostingEnvironment hostingEnv)
    {
        _hostingEnv = hostingEnv;
    }

    [HttpGet("environment")]
    public IActionResult Environment()
    {
        return Ok(_hostingEnv.EnvironmentName);
    }
Run Code Online (Sandbox Code Playgroud)

然后我跑去/api/debug/environment看看价值.

  • (这对视图没有帮助,但这是我知道检查我的配置是否正确的最快方式) (3认同)

Sha*_*uti 6

.net core 2.2中的以下工作:

@inject Microsoft.AspNetCore.Hosting.IHostingEnvironment env
@using Microsoft.AspNetCore.Hosting 

if (env.IsProduction())
{
   //You can also use:

   //env.IsStaging();
   //env.IsDevelopment();
   //env.IsEnvironment("EnvironmentName");
}
Run Code Online (Sandbox Code Playgroud)

  • @NikolayKostov,你错了。若要使用扩展方法.IsProduction()及类似方法,则必须使用Microsoft.AspNetCore.Hosting。我的答案有所不同,因为最佳答案在.net core 2.2中不再有效。我建议您在说什么之前先在.net core 2.2下测试最佳答案和我的答案。 (3认同)