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

新的 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>

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

例如,为了调试的目的,我想将环境名称(ProductionStaging,Dev)可视化为 HTML 注释:

<!-- Environment name: @......... -->
29492 次浏览

可以在视图中注入服务 IHostingEnvironment
@inject Microsoft.AspNetCore.Hosting.IHostingEnvironment hostingEnv
做个 @hostingEnv.EnvironmentName

我刚做了一个简单的 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);
}

然后运行 /api/debug/environment查看值。

下面是在.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");
}

建议从.NET Core 3.1开始使用

@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnv

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