【问题标题】:Determine ASP.NET Core environment name in the views在视图中确定 ASP.NET Core 环境名称
【发布时间】:2015-11-15 12:24:41
【问题描述】:

新的 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 中确定和可视化当前环境的名称?

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

<!-- Environment name: @......... -->

【问题讨论】:

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


    【解决方案1】:

    您可以通过以下方式在视图中注入服务IHostingEnvironment
    @inject Microsoft.AspNetCore.Hosting.IHostingEnvironment hostingEnv
    并做一个@hostingEnv.EnvironmentName

    【讨论】:

    • 显然在 ASP.NET Core 3 中,它是 @inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnv
    【解决方案2】:

    我刚刚做了一个简单的 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 来查看值。

    【讨论】:

    【解决方案3】:

    以下适用于 .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");
    }
    

    【讨论】:

    • 你不需要@using Microsoft.AspNetCore.Hosting。此外,您的答案与被选为最佳答案的答案相同。
    • @NikolayKostov,你错了。要使用扩展方法 .IsProduction() 和类似方法,则必须使用 Microsoft.AspNetCore.Hosting。我的答案不同,因为最佳答案在 .net core 2.2 中不再有效。我建议你在说什么之前在 .net core 2.2 下测试最佳答案和我的答案。
    【解决方案4】:

    从.NET Core 3.1开始推荐使用

    @inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnv
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-17
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多