栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从.net Core中的appsettings.json获取价值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从.net Core中的appsettings.json获取价值

感谢@Kirk指出我不应该认为它是.NET Core 2.0!

程序和启动类

.NET Core 2.x

您不需要

IConfiguration
Startup
构造函数中新建。它的实现将由DI系统注入。

// Program.cspublic class Program{    public static void Main(string[] args)    {        BuildWebHost(args).Run();    }    public static IWebHost BuildWebHost(string[] args) =>        WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .Build(); }// Startup.cspublic class Startup{    public IHostingEnvironment HostingEnvironment { get; private set; }    public IConfiguration Configuration { get; private set; }    public Startup(IConfiguration configuration, IHostingEnvironment env)    {        this.HostingEnvironment = env;        this.Configuration = configuration;    }}

.NET Core 1.x

您需要告诉

Startup
加载appsettings文件。

// Program.cspublic class Program{    public static void Main(string[] args)    {        var host = new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .UseApplicationInsights() .Build();        host.Run();    }}//Startup.cspublic class Startup{    public IConfigurationRoot Configuration { get; private set; }    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();        this.Configuration = builder.Build();    }    ...}

获得价值

您可以通过多种方法从应用程序设置中获取配置的值:

  • 简单的使用方法
    ConfigurationBuilder.GetValue<T>
  • 使用 选项模式

假设您的

appsettings.json
样子是这样的:

{    "ConnectionStrings": {        ...    },    "AppIdentitySettings": {        "User": { "RequireUniqueEmail": true        },        "Password": { "RequiredLength": 6, "RequireLowercase": true, "RequireUppercase": true, "RequireDigit": true, "RequireNonAlphanumeric": true        },        "Lockout": { "AllowedForNewUsers": true, "DefaultLockoutTimeSpanInMins": 30, "MaxFailedAccessAttempts": 5        }    },    "Recaptcha": {         ...    },    ...}

简单方法

您可以将整个配置注入到控制器/类的构造函数中(通过

IConfiguration
),并使用指定的键获取所需的值:

public class AccountController : Controller{    private readonly IConfiguration _config;    public AccountController(IConfiguration config)    {        _config = config;    }    [AllowAnonymous]    public IActionResult ResetPassword(int userId, string pre)    {        var vm = new ResetPasswordViewModel        { PasswordRequiredLength = _config.GetValue<int>(     "AppIdentitySettings:Password:RequiredLength"), RequireUppercase = _config.GetValue<bool>(     "AppIdentitySettings:Password:RequireUppercase")        };        return View(vm);    }}

选项模式

ConfigurationBuilder.GetValue<T>
,如果你只需要从应用程序设置一个或两个值的伟大工程。但是,如果您想从应用程序设置中获取多个值,或者不想在多个位置对这些键字符串进行硬编码,则使用
Options Pattern 可能会更容易。选项模式使用类来表示层次结构/结构。

要使用选项模式:

  1. 定义代表结构的类
  2. 注册那些类绑定到的配置实例
  3. 注入
    IOptions<T>
    要获取值的控制器/类的构造函数

1.定义配置类以表示结构

您可以定义具有 需要与 您的应用程序设置 的键 完全匹配 的属性的类。类的名称不必与应用程序设置中的部分名称匹配:

public class AppIdentitySettings{    public UserSettings User { get; set; }    public PasswordSettings Password { get; set; }    public LockoutSettings Lockout { get; set; }}public class UserSettings{    public bool RequireUniqueEmail { get; set; }}public class PasswordSettings{    public int RequiredLength { get; set; }    public bool RequireLowercase { get; set; }    public bool RequireUppercase { get; set; }    public bool RequireDigit { get; set; }    public bool RequireNonAlphanumeric { get; set; }}public class LockoutSettings{    public bool AllowedForNewUsers { get; set; }    public int DefaultLockoutTimeSpanInMins { get; set; }    public int MaxFailedAccessAttempts { get; set; }}

2.注册配置实例

然后,您需要

ConfigureServices()
在启动时注册此配置实例:

using Microsoft.Extensions.Configuration;using Microsoft.Extensions.DependencyInjection;...namespace DL.SO.UI.Web{    public class Startup    {        ...        public void ConfigureServices(IServiceCollection services)        { ... var identitySettingsSection =      _configuration.GetSection("AppIdentitySettings"); services.Configure<AppIdentitySettings>(identitySettingsSection); ...        }        ...    }}

3.注入IOptions

最后,在要获取值的控制器/类上,需要

IOptions<AppIdentitySettings>
通过构造函数注入:

public class AccountController : Controller{    private readonly AppIdentitySettings _appIdentitySettings;    public AccountController(IOptions<AppIdentitySettings> appIdentitySettingsAccessor)    {        _appIdentitySettings = appIdentitySettingsAccessor.Value;    }    [AllowAnonymous]    public IActionResult ResetPassword(int userId, string pre)    {        var vm = new ResetPasswordViewModel        { PasswordRequiredLength = _appIdentitySettings.Password.RequiredLength, RequireUppercase = _appIdentitySettings.Password.RequireUppercase        };        return View(vm);    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/576262.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号