如何将配置设置添加到 _Layout.cshtml 共享 Razor 页面

How to add configuration settings into _Layout.cshtml shared Razor page

我们有这个 StartUp 如下从 appsettings.json:

获取值
public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();

    var environment = Configuration["ApplicationSettings:Environment"];
}

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<AppSettings>(Configuration.GetSection("ApplicationSettings"));

    ...
}

我们还建模了 AppSettings

public class AppSettings
{
    public string Environment { get; set; }
    public string Version { get; set; }
}

由于我正在 /Pages/Shared/_Layout.cshtml 尝试将此 Version 注入此共享页面,因此我无法执行代码隐藏方法。那怎么注入呢?

更新 1 -

理论上,如果它是页面模型,我可以这样做:

public class _LayoutModel : PageModel
{
    private readonly AppSettings _appSettings;

    public string Version;
    public string Environment;

    public _LayoutModel(IOptions<AppSettings> appsettings)
    {
        _appSettings = appsettings.Value;
    }

    public void OnGet()
    {
        Environment = _appSettings.Environment;
        Version = _appSettings.Version;
    }
}

您可以使用 _layout.cshtml 文件中的 ViewData 访问您的设置。

在你的 _layout.cshtml 文件中

<title>Version : @ViewData["Version"] | Environment : @ViewData["Environment"]</title>

但是您必须像这样在共享此布局的所有页面的 .cshtml 文件中设置 ViewData 的值

@model YourPageModel
@{
    ViewData["Environment"] = Model.Environment;
    ViewData["Version"] = Model.Version;
    Layout = "/Pages/Shared/_Layout.cshtml";
}

希望这对您有所帮助:)

就像在 Controller 中一样,您也可以将您的服务注入到视图中。

您可以这样使用 @inject

@inject Microsoft.Extensions.Options.IOptions<AppSettings> AppSettingsOptions

或将 @using Microsoft.Extensions.Options 添加到 _ViewImports.cs,然后像这样在布局中注入选项:

@inject IOptions<AppSettings> AppSettingsOptions.

之后您可以访问您的设置,例如:@AppSettingsOptions.Value.Version

添加到 Hameed 的答案中,对于 Core 3.1:

AppSettings.Json: { "Company": {"Name": "EvilCorp"}}

_ViewImports.cshtml: @using Microsoft.Extensions.Configuration

_Layout.cshtml: @inject IConfiguration _config

在剃刀 html 中: <h1>@_config["Company:Name"]</h1>