ホームページ バックエンド開発 C#.Net チュートリアル .NETでConfigurationを完了して構成を読み込む例の詳細な説明

.NETでConfigurationを完了して構成を読み込む例の詳細な説明

May 12, 2017 am 10:03 AM
asp.net

本篇文章主要介绍了详解ASP.NET Core实现强类型Configuration读取配置数据 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

前言

实现读取JSON文件几种方式,在项目中采取老办法简单粗暴,结果老大过来一看,恩,这样不太可取,行吧那我就用.NET Core中最新的方式诺,切记,适合的才是最好的,切勿懒。

.NET Core读取JSON文件通过读取文件方式

 当我将VS2015项目用VS2017打开后再添加控制器,此时会报错如下:

此时我们应该在该项目中的.csproj中添加如下这一句才能解决此问题:

 <ItemGroup>
 <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.0" />
 </ItemGroup>
ログイン後にコピー

我们在读取存放JSON目录时利用 IHostingEnvironment 类来实现,通过该类中的如下两个属性来获取项目目录:

   //获取当前项目所在目录
   var contentPath = _hostingEnv.ContentRootPath;

   //获取wwwroot所在目录
   var rootPath = _hostingEnv.WebRootPath;
ログイン後にコピー

我们在当前项目下建立一个存放JSON的文件夹,如下:

在该json文件中,我们给出数据如下:

{
 "name": "jeffcky",
 "age": 25
}
ログイン後にコピー

接下来则是读取JSON文件并获取数据了:

  [HttpPost]
  public async Task<IActionResult> Json()
  {
   var result = string.Empty;

   var filePath = _hostingEnv.ContentRootPath + Path.DirectorySeparatorChar + "Json"
    + Path.DirectorySeparatorChar + "Read.json";

   using (var streamReader = System.IO.File.OpenText(filePath))
   {
    result = await streamReader.ReadToEndAsync();
   }

   var json = new { name = string.Empty, age = 0 };

   var data = JsonConvert.DeserializeAnonymousType(result, json);

   return View();
  }
ログイン後にコピー

此时将完全读取数据:

到今天我才发现匿名类型是只读的,而不能赋值。【可笑的我】

上述是一种通过读取Json文件的方式来读取数据,当每来一个请求则读取一次文件,不太合适,所以老大说不可取,那就用第二种诺。

.NET Core内置读取JSON文件

当我们需要在其他控制器获取 appsettings.json 中的值时我们是怎样做的呢?比如我们要读取该json文件jb51节点下的name值

{
 "LogPath": "C:\\Jeffcky_StudyEFCore\\logs",
 "Logging": {
 "IncludeScopes": false,
 "LogLevel": {
  "Default": "Debug",
  "System": "Information",
  "Microsoft": "Information"
 }
 },
 "jb51": {
 "name": "Jeffcky"
 }
}
ログイン後にコピー

此时我们通过配置类Configuration来读取,同时我们需要将此类接口进行注入,下面两种方式皆可:

   services.AddSingleton<IConfigurationRoot>(Configuration);
   services.AddSingleton<IConfiguration>(Configuration);
ログイン後にコピー

接下来同样在控制器构造函数中进行获取。

然后就是获取该json中cnblogs节点下的数据了。

这种方式挺好,但是对于我们习惯了智能提示来说要是写错了单词,还得检查岂不麻烦,所以我们最终读取json通过强类型来实现。在程序启动时就加载我们自定义的json文件。

  public Startup(IHostingEnvironment env)
  {

   var builder = new ConfigurationBuilder()
    .SetBasePath(env.ContentRootPath)
    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
    .AddJsonFile("read.json")
    .AddEnvironmentVariables();
   Configuration = builder.Build();
  }
ログイン後にコピー

由于在读取配置json需要一个根节点,所以我们将上述read.json文件进行如下修改:

{
 "jb51": {
 "Name": "jeffcky",
 "Age": 25
 }
}
ログイン後にコピー

然后在 ConfigureServices 方法中获取该节点。

 services.Configure<Person>(Configuration.GetSection("jb51"));
ログイン後にコピー

此时在控制器构造函数就变成了如下这样:

  private readonly Models.Person p;
  public ReadJsonController(IOptions<Models.Person> option)
  {
   p = option.Value;
  }
ログイン後にコピー

最终将直接读取到json中配置的数据:

  [HttpPost]
  public IActionResult Json()
  {
   var age = p.Age;
   var name = p.Name;

   return View();
  }
ログイン後にコピー

一切都是那么简单和自然。

总结

本节稍稍讲解了下在.NET Core中如何实现强类型Configuration从而使得当程序启动时直接将json文件进行加载到内存当中而非每次都去读取文件来加载,希望对阅读本文的你有稍稍帮助。

【相关推荐】

1. ASP免费视频教程

2. 李炎恢ASP基础视频教程

3. ASP教程

以上が.NETでConfigurationを完了して構成を読み込む例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C言語でさまざまなシンボルを使用する方法 C言語でさまざまなシンボルを使用する方法 Apr 03, 2025 pm 04:48 PM

c言語のシンボルの使用方法は、算術、割り当て、条件、ロジック、ビット演算子などをカバーします。算術演算子は基本的な数学的操作に使用されます。割り当てと追加、下位、乗算、除算の割り当てには、条件操作に使用されます。ポインター、ファイル終了マーカー、および非数値値。

C文字列におけるcharの役割は何ですか C文字列におけるcharの役割は何ですか Apr 03, 2025 pm 03:15 PM

Cでは、文字列でCharタイプが使用されます。1。単一の文字を保存します。 2。配列を使用して文字列を表し、ヌルターミネーターで終了します。 3。文字列操作関数を介して動作します。 4.キーボードから文字列を読み取りまたは出力します。

C言語のcharとwchar_tの違い C言語のcharとwchar_tの違い Apr 03, 2025 pm 03:09 PM

C言語では、charとwchar_tの主な違いは文字エンコードです。CharはASCIIを使用するか、ASCIIを拡張し、WCHAR_TはUnicodeを使用します。 Charは1〜2バイトを占め、WCHAR_Tは2〜4バイトを占有します。 charは英語のテキストに適しており、wchar_tは多言語テキストに適しています。 CHARは広くサポートされており、WCHAR_TはコンパイラとオペレーティングシステムがUnicodeをサポートするかどうかに依存します。 CHARの文字範囲は限られており、WCHAR_Tの文字範囲が大きく、特別な機能が算術演算に使用されます。

C言語で特殊文字を処理する方法 C言語で特殊文字を処理する方法 Apr 03, 2025 pm 03:18 PM

C言語では、以下などのエスケープシーケンスを通じて特殊文字が処理されます。\ nはラインブレークを表します。 \ tはタブ文字を意味します。 ESACEシーケンスまたは文字定数を使用して、Char C = '\ n'などの特殊文字を表します。バックスラッシュは2回逃げる必要があることに注意してください。さまざまなプラットフォームとコンパイラが異なるエスケープシーケンスを持っている場合があります。ドキュメントを参照してください。

マルチスレッドと非同期C#の違い マルチスレッドと非同期C#の違い Apr 03, 2025 pm 02:57 PM

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

C言語でCharを変換する方法 C言語でCharを変換する方法 Apr 03, 2025 pm 03:21 PM

C言語では、charタイプの変換は、キャスト:キャスト文字を使用することにより、別のタイプに直接変換できます。自動タイプ変換:あるタイプのデータが別のタイプの値に対応できる場合、コンパイラは自動的に変換します。

C言語合計の機能は何ですか? C言語合計の機能は何ですか? Apr 03, 2025 pm 02:21 PM

C言語に組み込みの合計機能はないため、自分で書く必要があります。合計は、配列を通過して要素を蓄積することで達成できます。ループバージョン:合計は、ループとアレイの長さを使用して計算されます。ポインターバージョン:ポインターを使用してアレイ要素を指し示し、効率的な合計が自己概要ポインターを通じて達成されます。アレイバージョンを動的に割り当てます:[アレイ]を動的に割り当ててメモリを自分で管理し、メモリの漏れを防ぐために割り当てられたメモリが解放されます。

C言語でchar配列の使用方法 C言語でchar配列の使用方法 Apr 03, 2025 pm 03:24 PM

Char Arrayは文字シーケンスをC言語で保存し、char array_name [size]として宣言されます。アクセス要素はサブスクリプト演算子に渡され、要素は文字列のエンドポイントを表すnullターミネーター「\ 0」で終了します。 C言語は、strlen()、strcpy()、strcat()、strcmp()など、さまざまな文字列操作関数を提供します。

See all articles