媒介
在应用顺序开辟的过程当中,有的时刻须要在代码中保留一些秘要的信息,比方加密密钥,字符串,或许是用户名暗码等。一般的做法是保留到一个设置文件中,在之前我们会把他保留到web.config中,但是在ASP.NET Core中,这一体式格局也许发生了转变,或许说你有更多多元化的要领, 以及越发文雅的的设置来设置或许保留这些秘要材料。
早先我认为这个UserSecrets它并没有什么用,由于我有须要设置的处所我直接设置到appsetting.json文件中就能够了,直到一次开辟过程当中,我才感觉到了它真正的用处。
目次
用户秘要引见
怎样增加用户秘要
在应用顺序中运用用户秘要
总结
用户秘要引见
有以下场景人人能够想一下在之前的代码中我们是怎样处置惩罚的:
须要保留一些和第三方网站对接的密钥,比方和 微信,微博站点运用的 appkey
给每一个开辟人员设置不必的用户名暗码来接见一些资本
开辟人员在开辟过程当中运用各自本机的数据库,怎样设置数据库地点、账号和暗码
假设说末了一项,每一个开辟要运用本身本机的数据库,你能够会说让每一个人修正本身的web.config,在提交代码的时刻不提交就好了。那末假如在web.config增加其他设置项的时刻,明显不提交web.config文件不合理的。
如今,ASP.NET Core 供应了一种很文雅简约的体式格局 User Secrets 用来协助我们处理这个事变。
在新建一个 ASP.NET Core Web 应用顺序的时刻,会在 Startup.cs 文件中看到如许一段代码:
public Startup(IHostingEnvironment env) { ..... if (env.IsDevelopment()) { builder.AddUserSecrets(); } builder.AddEnvironmentVariables(); }
在 project.json 文件中,会看到 User Secrets 相干的一些设置
{ "userSecretsId": "aspnet-WebAppCore-e278c40f-15bd-4c19-9662-541514f02f3e" ... "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0", "Microsoft.Extensions.SecretManager.Tools": “1.0.0-preview2-final” }
能够看到builder.AddUserSecrets这行代码,他是在开辟环境才运转的。
userSecretsId是用来标识项目的User Secrets唯一性的,假如有两个项目须要运用差别的Secrets ,这就须要有差别的userSecretsId。
Microsoft.Extensions.SecretManager.Tools 主假如用来设置或许检察secrets的值。
怎样增加用户秘要
能够在敕令行中运用敕令来增加:
image
切换敕令行窗口到顺序的运转目次, 输入 dotnet user-secrets -h ,来检察能够运用的敕令
运用 dotnet user-secrets list 列出一切的用户秘要
运用 dotnet user-secrets set WeChatAppKey "X3423FEED2435DD"设置一个用户秘要,个中 WebChatAppKey 为键,背面的是值。
然后运用dotnet user-secrets list来检察设置的键值对。
然后我又设置了一个数据库的衔接字符串进去。
以上是运用敕令行的体式格局来设置用户秘要,也能够运用 Visual Studio 2015替代敕令行来做这项事情。
Visual Studio中,在Web项目上右键,能够看到一个 治理用户秘要 的菜单:
image
点击翻开时刻,会涌现一个secrets.json的文件,内里就是刚刚在敕令行设置的键值对:
image
有些同砚能够会问既然是存储到secrets.json,那末这个文件是在那里呢?
secrets.json的存储位置?
在非Windows体系中,它的存储位置在
~/.microsoft/usersecrets/<userSecretsId>/secrets.json
在Windows体系中,它的位置在
C:\Users\用户名\AppData\Roaming\Microsoft\UserSecrets\aspnet-WebAppCore-e278c40f-15bd-4c19-9662-541514f02f3e
能够看到,存储的上层文件夹就是project.json文件中的 userSecretsId 设定的值。
在应用顺序中运用用户秘要
要在应用顺序中接见设置的用户秘要,你须要保证project.json文件中存在依靠项:
Microsoft.Extensions.Configuration.UserSecrets 而且builder.AddUserSecrets()。
然后在Startup.cs文件中经由过程 Configuration 对象接见
public IConfigurationRoot Configuration { get; } public void ConfigureServices(IServiceCollection services) { var wechatKey = Configuration["WeChatAppKey"] }
你能够运用DI来将用户秘要映射到一个C#类文件,像如许
secrets.json
{ "SecretsKeys": { WeCharAppKey:"xxejfwert3045", WeboAppKey:"35402345lkefgjlkdfg", ..... } }
SecretsKeysConfig.cs
public class SecretsKeysConfig { public string WeCharAppKey { get; set;} public string WeboAppKey { get; set;} // ...... }
Startup.cs
public void ConfigureServices(IServiceCollection services) { services.Configure<SecretsKeysConfig>(Configuration.GetSection("SecretsKeys")); // 其他代码 }
HomeController.cs
public class HomeController : Controller { public SecretsKeysConfig AppConfigs { get; } public HomeController(IOptions<SecretsKeysConfig> appkeys) { AppConfigs = appkeys.Value; } }
注重:假如你的appsetting.json文件中有和secrets.json文件中雷同节点(争执)的设置项,那末就会被secrets.json中的设置项给覆盖掉,由于 builder.AddUserSecrets()晚于 AddJsonFile("appsettings.json")注册, 那末我们能够应用这个特征来在每一个开辟人员的机械上从新设置数据库衔接字符串了。
总结
以上,也许能够感觉到微软在 ASP.NET Core 中关于开辟人员照样异常知心的,许多小细节都斟酌到了,因此在我们构建应用顺序的过程当中,能够多运用这些小功用(特征)来让我们的代码越发的文雅~
以上就是ASP.NET中Core文雅的在开辟环境保留秘要(User Secrets)的详解的细致内容,更多请关注ki4网别的相干文章!