麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > .NET > 正文

ASP.NET Core優雅的在開發環境保存機密(User Secrets)

2024-07-10 13:32:23
字體:
來源:轉載
供稿:網友

前言

在應用程序開發的過程中,有的時候需要在代碼中保存一些機密的信息,比如加密密鑰,字符串,或者是用戶名密碼等。通常的做法是保存到一個配置文件中,在以前我們會把他保存到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 中對于開發人員還是非常貼心的,很多小細節都考慮到了,因此在我們構建應用程序的過程中,可以多使用這些小功能(特性)來讓我們的代碼更加的優雅~

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 免费在线观看一级片 | 97伦理| 中文在线观看视频 | 一级毛片在线免费观看视频 | 久久国产精 | 91天堂国产在线 | 嗯~啊~弄嗯~啊h高潮视频 | 色偷偷一区 | 欧美一级黄色免费 | 99国内精品 | 毛片在线免费播放 | 午夜视频亚洲 | 国产午夜免费福利 | 偷偷操偷偷操 | aa国产视频一区二区 | 久久精品视频69 | 免费网站看v片在线a | 欧美成人精品一区二区三区 | av在线免费网| 99国产精成人午夜视频一区二区 | 久久国产精品久久精品国产演员表 | 视频一区二区不卡 | 久草在线免费看 | 男男啪羞羞视频网站 | 国产精品久久久久久久久久 | 国产免费观看a大片的网站 欧美成人一级 | 一区二区三区日韩 | 国产精品久久久久久久久久东京 | 亚洲网站免费看 | 国产精品久久久久一区二区 | 最近中文字幕一区二区 | 久久情爱网 | 麻豆一区二区99久久久久 | 91成人免费在线视频 | 黄色大片高清 | 国产精品自拍av | 欧美一级黄色片在线观看 | 九九黄色| 久久无| 欧美精品久久久久久久久久 | 激情久久一区二区 |