如何在_Layout.cshtml共享Razor页面中添加配置设置

dcp*_*ers 1 .net-core asp.net-core razor-pages

我们有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"));

    ...
}
Run Code Online (Sandbox Code Playgroud)

我们也模型叫 AppSettings

public class AppSettings
{
    public string Environment { get; set; }
    public string Version { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

更新 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Ham*_*eed 8

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

你可以这样使用@inject

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

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

@inject IOptions<AppSettings> AppSettingsOptions.

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


Tim*_*son 5

为核心 3.1 添加 Hameed 的回答:

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

_ViewImports.cshtml: @using Microsoft.Extensions.Configuration

_Layout.cshtml: @inject IConfiguration _config

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