Nikolay Kostov
Nikolay Kostov

Reputation: 16983

Determine ASP.NET Core environment name in the views

The new ASP.NET Core framework gives us ability to execute different html for different environments:

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

But how can I determine and visualize the name of the current environment in the _Layout.cshtml of an ASP.NET Core MVC web application?

For example I want to visualize the environment name (Production, Staging, Dev) as a HTML comment for debugging purposes:

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

Upvotes: 88

Views: 40374

Answers (5)

Craig Wayne
Craig Wayne

Reputation: 5070

Just to build on @Simon's answer

IHostEnvironment will become obsolete

ref: https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.hosting.ihostingenvironment?view=aspnetcore-7.0

You can use IWebHostEnvironment instead.

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

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

    [HttpGet("environment")]
    public IActionResult Environment()
    {
        return Ok(_hostingEnv.EnvironmentName);
    }
}

Upvotes: 2

MonkeyDreamzzz
MonkeyDreamzzz

Reputation: 4368

Starting from .NET Core 3.1 it is recommended to use

@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnv

Add this to at the top of your Razor view. You can use @hostingEnv.EnvironmentName to get the current environment.

Upvotes: 20

Simon_Weaver
Simon_Weaver

Reputation: 146160

I just made a simple API controller:

[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);
    }

Then I just run /api/debug/environment to see the value.

Upvotes: 26

Shadi Alnamrouti
Shadi Alnamrouti

Reputation: 13288

The following works In .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");
}

Upvotes: 17

Kiran
Kiran

Reputation: 57989

You can inject the service IHostingEnvironment in your view by doing
@inject Microsoft.AspNetCore.Hosting.IHostingEnvironment hostingEnv
and do a @hostingEnv.EnvironmentName

Upvotes: 146

Related Questions