ASP.NET Coreは強いタイプのコンフィギュレーションを実現して構成データを読み取る



前言
JSONファイルを読むいくつかの方法を実现して、プロジェクトの中でいつもの方法を取って简単で乱暴で、结局ボスが来て见て、うん、これはあまり取るに足らないで、いいでしょうそれでは私は使います.NET Coreの最新の方法は、覚えておいてください.似合うのが一番いいです.怠けないでください.
.NET Core JSONファイルの読み込みファイル方式
VS 2015プロジェクトをVS 2017で開いてからコントローラを追加すると、次のようにエラーが発生します.
この時点で私たちはこのプロジェクトにいるはずです.csprojにこの問題を解決するには、次の文を追加します.
 
    
  

JSONディレクトリを読み込むときにIHostingEnvironmentクラスを使用して実装し、このクラスの次の2つの属性でプロジェクトディレクトリを取得します.
            //          
            var contentPath = _hostingEnv.ContentRootPath;            //  wwwroot    
            var rootPath = _hostingEnv.WebRootPath;

現在のプロジェクトの下にJSONを保存するフォルダを作成します.以下のようにします.
このjsonファイルでは、次のようなデータが表示されます.
{  "name": "jeffcky",  "age": 25}

次にJSONファイルを読み込み、データを取得します.
        [HttpPost]        public async Task 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ファイルを読み取る方式でデータを読み取るもので、要求ごとにファイルを読み取るのは適切ではないので、ボスが取るべきではないと言ったら、2番目のノを使います.
.NET Core内蔵読み込みJSONファイル
他のコントローラでappsettingsを取得する必要がある場合.jsonの値の場合、私たちはどのようにしますか?たとえば、jsonファイルcnblogsノードのname値を読み込む
{  "LogPath": "C:\\Jeffcky_StudyEFCore\\logs",  "Logging": {    "IncludeScopes": false,    "LogLevel": {      "Default": "Debug",      "System": "Information",      "Microsoft": "Information"
    }
  },  "cnblogs": {    "name": "Jeffcky"
  }
}

この場合、クラスコンフィギュレーションを構成して読み込みます.このようなインタフェースを注入する必要があります.次の2つの方法があります.
            services.AddSingleton(Configuration);
            services.AddSingleton(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ファイルは次のように変更されます.
{  "cnblogs": {    "Name": "jeffcky",    "Age": 25
  }
}

その後、コンフィギュレーションサービスメソッドでノードを取得します.
 services.Configure(Configuration.GetSection("cnblogs"));

このとき、コントローラ構築関数は次のようになります.
        private readonly Models.Person p;        public ReadJsonController(IOptions option)
        {
            p = option.Value;
        }

最終的には、jsonで構成されているデータに直接読み込みます.
        [HttpPost]        public IActionResult Json()
        {            var age = p.Age;            var name = p.Name;            return View();
        }

すべてはそんなに簡単で自然です.
まとめ
本節では少し説明した.NET Coreで強力なタイプのコンフィギュレーションを実装する方法で、プログラムが起動するたびにファイルを読み込んでロードするのではなく、jsonファイルをメモリに直接ロードすることができます.