这篇文章主要为大家详细介绍了ASP.NET Core如何优雅的在开发环境保存机密User Secrets,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
前言
在应用程序开发的过程中,有的时候需要在代码中保存一些机密的信息,比如加密密钥,字符串,或者是用户名密码等。通常的做法是保存到一个配置文件中,在以前我们会把他保存到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 中对于开发人员还是非常贴心的,很多小细节都考虑到了,因此在我们构建应用程序的过程中,可以多使用这些小功能(特性)来让我们的代码更加的优雅~
【相关推荐】
4. 如何在ASP.NET Core中使用Cookie中间件的详细介绍
5. .Net Core中如何使用ref和Span8742468051c85b06f0a0af9e3e506b5c提高程序性能的实现代码
以上是分享ASP.NET Core在开发环境中保存机密(User Secrets)的实例的详细内容。更多信息请关注PHP中文网其他相关文章!

C#.NET的优势包括:1)语言特性,如异步编程简化了开发;2)性能与可靠性,通过JIT编译和垃圾回收机制提升效率;3)跨平台支持,.NETCore扩展了应用场景;4)实际应用广泛,从Web到桌面和游戏开发都有出色表现。

C#并不总是与.NET捆绑在一起。1)C#可以在Mono运行时环境中运行,适用于Linux和macOS。2)在Unity游戏引擎中,C#用于脚本编写,不依赖.NET框架。3)C#还可用于嵌入式系统开发,如.NETMicroFramework。

C#在.NET生态系统中扮演核心角色,是开发者的首选语言。1)C#提供高效、易用的编程方式,结合C、C 和Java的优点。2)通过.NET运行时(CLR)执行,确保跨平台高效运行。3)C#支持从基本到高级的用法,如LINQ和异步编程。4)优化和最佳实践包括使用StringBuilder和异步编程,提高性能和可维护性。

C#是微软在2000年发布的编程语言,旨在结合C 的强大功能和Java的简洁性。1.C#是一种类型安全、面向对象的编程语言,支持封装、继承和多态。2.C#的编译过程将代码转化为中间语言(IL),然后在.NET运行时环境(CLR)中即时编译成机器码执行。3.C#的基本用法包括变量声明、控制流和函数定义,而高级用法涵盖异步编程、LINQ和委托等。4.常见错误包括类型不匹配和空引用异常,可通过调试器、异常处理和日志记录来调试。5.性能优化建议包括使用LINQ、异步编程和提高代码可读性。

C#是一种编程语言,而.NET是一个软件框架。1.C#由微软开发,适用于多平台开发。2..NET提供类库和运行时环境,支持多语言。两者协同工作,构建现代应用。

C#.NET是一个强大的开发平台,结合了C#语言和.NET框架的优势。1)它广泛应用于企业应用、Web开发、游戏开发和移动应用开发。2)C#代码编译成中间语言后由.NET运行时环境执行,支持垃圾回收、类型安全和LINQ查询。3)使用示例包括基本控制台输出和高级LINQ查询。4)常见错误如空引用和类型转换错误可以通过调试器和日志记录解决。5)性能优化建议包括异步编程和优化LINQ查询。6)尽管面临竞争,C#.NET通过不断创新保持其重要地位。

C#.NET的未来趋势主要集中在云计算、微服务、AI和机器学习集成以及跨平台开发三个方面。1)云计算和微服务:C#.NET通过Azure平台优化云环境表现,支持构建高效微服务架构。2)AI和机器学习集成:借助ML.NET库,C#开发者可在应用中嵌入机器学习模型,推动智能化应用发展。3)跨平台开发:通过.NETCore和.NET5 ,C#应用可在Windows、Linux和macOS上运行,扩展部署范围。

C#.NET开发的最新动态和最佳实践包括:1.异步编程提高应用响应性,使用async和await关键字简化非阻塞代码;2.LINQ提供强大查询功能,通过延迟执行和表达式树高效操作数据;3.性能优化建议包括使用异步编程、优化LINQ查询、合理管理内存、提升代码可读性和维护性、以及编写单元测试。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

Atom编辑器mac版下载
最流行的的开源编辑器

Dreamweaver CS6
视觉化网页开发工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。