在视图中确定 ASP.NET Core 环境名称
Posted
技术标签:
【中文标题】在视图中确定 ASP.NET Core 环境名称【英文标题】:Determine ASP.NET Core environment name in the views 【发布时间】: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: @......... -->
【问题讨论】:
【参考方案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
来查看值。
【讨论】:
(这对视图没有帮助,但这是我所知道的检查我的配置是否正确的最快方法) 答案属于单独的问题***.com/questions/56495475/…【参考方案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
获取当前环境。
【讨论】:
以上是关于在视图中确定 ASP.NET Core 环境名称的主要内容,如果未能解决你的问题,请参考以下文章
[MVC&Core]ASP.NET Core MVC 视图传值入门
007.Adding a view to an ASP.NET Core MVC app -- 在asp.net core mvc中添加视图