本文共 1371 字,大约阅读时间需要 4 分钟。
目录
如何从Web应用程序的配置文件反序列化对象
本技巧揭示了一种非常简单的方法,可以将Web应用程序的配置文件的各个部分作为对象读取,而无需或依赖注入。
在ASP.NET Core中,很容易在配置文件中配置一组相关设置,通常是appsettings.json,要反序列化为类并注入DI客户端。然而,显然,简单地从该文件反序列化对象并在DI容器完全初始化之前使用它并不简单。
作为一个例子,我已经编写了我的代码,其中通过从appsettings.json读取这些规则作为对象来为配置密码规则。通常情况下,我会对这些设置进行硬编码,因为它们在应用程序的生命周期中很少发生变化,但是在我包含密码生成的项目中,我希望生成的密码符合与为身份配置的密码相同的规则,我认为在appsettings.json中存储这些密码选项会很好。
这是我在配置文件中存储密码规则的方法:
{ "ConnectionStrings": { "DefaultConnection": "Server=localhost;Database=Flair;Trusted_Connection=True; MultipleActiveResultSets=true" }, "Logging": { "LogLevel": { "Default": "Warning" }, }, "Authentication": { "PasswordRules": { "RequiredLength": 8, "RequiredUniqueChars": 2, "RequireNonAlphanumeric": false, "RequireLowercase": false, "RequireUppercase": false, "RequireDigit": true } }, "AllowedHosts": "*"}
这就是我在Startup.cs中读取这些设置和配置Identity的方法:
var pwdSection = Configuration.GetSection("Authentication:PasswordRules");var pwdOpts = pwdSection.Get();services.Configure (options =>{ options.Password = pwdOpts;});
被配置的IdentityOptions的options.Password属性是类的简单对象PasswordOptions。我所要做的就是确保配置文件的“ Authentication:PasswordRules”部分是对象的序列化。
奇迹发生在调用时:
var pwdOpts = pwdSection.Get()
除非我在项目中包含以下NuGet包,否则这通常是不可能的。
Microsoft.Extensions.Configuration.Binder
这个StackOverflow 很好地揭示了这一点。
原文地址:
转载地址:http://lzzhj.baihongyu.com/