.NET学习笔记----关于.NET Core那些事(3)【配置文件的读取、json文件的通用解析、读取静态文件】

一、直接读取

appsettings.json准备

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "Id": "123456",
  "Name": "Richard老师",
  "TeachInfo": {
    "Id": 123456,
    "Name": "Richard001"
  },
  "ConnectionStrings": {
    "WriteConnection": "Server=LAPTOP-JU1DEJP1;Database=ZhaoxiDBSet;Trusted_Connection=True;",
    "ReadConnectionList": [
      "Server=LAPTOP-JU1DEJP1;Database=ZhaoxiDBSet01;Trusted_Connection=True;",
      "Server=LAPTOP-JU1DEJP1;Database=ZhaoxiDBSet02;Trusted_Connection=True;",
      "Server=LAPTOP-JU1DEJP1;Database=ZhaoxiDBSet03;Trusted_Connection=True;"
    ]
  }
}

控制器中读取json

 public class IConfigurationController : Controller
{
    //声明
    private IConfiguration _configuration;
    //构造函数中注册
    public IConfigurationController(IConfiguration configuration)
    {
        this._configuration=configuration;
    }

    public IActionResult Index()
    {
        //.通过IConfiguration来读取配置文件JSON取对象属性
        //通过标签名获取
        int id = Convert.ToInt32(_configuration["Id"]);
        string name =_configuration["Name"].ToString();
        //通过 节点名:节点名 获取
        int teachInfo_Id = Convert.ToInt32(_configuration["TeachInfo:Id"]);
        string teachInfo_Name = _configuration["TeachInfo:Name"].ToString();

        string connectionStrings_WriteConnection = _configuration["ConnectionStrings:WriteConnection"].ToString();
        //如果取数组中的某个值,通过 节点名:节点名:下标(从0开始) 获取
        string connectionStrings_ReadConnectionList1 = _configuration["ConnectionStrings:ReadConnectionList:0"].ToString();
        string connectionStrings_ReadConnectionList2 = _configuration["ConnectionStrings:ReadConnectionList:1"].ToString();
        string connectionStrings_ReadConnectionList3 = _configuration["ConnectionStrings:ReadConnectionList:2"].ToString();


        return View();
    }
}

s


二、通过实体类读取节点

定义与配置文件中需要获取的标签结构完全一致的实体类:IConfiguration .Bind() ----反序列化

要读取的json字符串

 "ConnectionStrings": {
    "WriteConnection": "Server=LAPTOP-JU1DEJP1;Database=ZhaoxiDBSet;Trusted_Connection=True;",
    "ReadConnectionList": [
      "Server1=LAPTOP-JU1DEJP1;Database=ZhaoxiDBSet01;Trusted_Connection=True;",
      "Server2=LAPTOP-JU1DEJP2;Database=ZhaoxiDBSet02;Trusted_Connection=True;",
      "Server3=LAPTOP-JU1DEJP3;Database=ZhaoxiDBSet03;Trusted_Connection=True;"
    ]
  }

定义的实体类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace NET5WebApplication.Utility
{
    public class ConnectionStringOptions
    {
        public string WriteConnection { get; set; }
        public string[] ReadConnectionList { get; set; }
    } 
}

读取json

public class IConfigurationController : Controller
    {
        //声明
        private IConfiguration _configuration;
        //构造函数中注册
        public IConfigurationController(IConfiguration configuration)
        {
            this._configuration = configuration;
        }

        public IActionResult Index()
        {
            ConnectionStringOptions options = new ConnectionStringOptions();
            //将字符串转换为实体类
            _configuration.Bind("ConnectionStrings", options);

            string writeConnection = options.WriteConnection;
            string one = options.ReadConnectionList[0].ToString();
            string two = options.ReadConnectionList[1].ToString();
            string three = options.ReadConnectionList[2].ToString();
            return View();
        }
    }

在这里插入图片描述


三、配置服务,绑定实体,在控制器直接获取配置对象

用到的json字符串==

"ConnectionStrings": {
    "WriteConnection": "Server=LAPTOP-JU1DEJP1;Database=ZhaoxiDBSet;Trusted_Connection=True;",
    "ReadConnectionList": [
      "Server1=LAPTOP-JU1DEJP1;Database=ZhaoxiDBSet01;Trusted_Connection=True;",
      "Server2=LAPTOP-JU1DEJP2;Database=ZhaoxiDBSet02;Trusted_Connection=True;",
      "Server3=LAPTOP-JU1DEJP3;Database=ZhaoxiDBSet03;Trusted_Connection=True;"
    ]
  }

用到的类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace NET5WebApplication.Utility
{
    public class ConnectionStringOptions
    {
        public string WriteConnection { get; set; }
        public string[] ReadConnectionList { get; set; }
    } 
}

Startup.cs中的配置
在这里插入图片描述

public void ConfigureServices(IServiceCollection services)
{
    //使用结构完全一直的类配置要读取的节点  
    //services.Configure<类名>(Configuration.GetSection("节点名"));
    services.Configure<ConnectionStringOptions>(Configuration.GetSection("ConnectionStrings"));

    services.AddControllersWithViews();
}

控制器中的代码
在这里插入图片描述

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Options;
using NET5WebApplication.Utility;
using System;

namespace IConfigurationPro.Controllers
{
    public class IConfigurationController : Controller
    {
        private ConnectionStringOptions connectionStringOptions;
        private ConnectionStringOptions connectionStringOptions2;
		//构造函数内注入,两种方式都可用
        public IConfigurationController(IOptionsMonitor<ConnectionStringOptions> optionsMonitor, 
            IOptions<ConnectionStringOptions> optionsMonitor2)
		{
            this.connectionStringOptions = optionsMonitor.CurrentValue;
            this.connectionStringOptions2 = optionsMonitor2.Value;
        }

		public IActionResult Index()
        {
            string writeConnection = connectionStringOptions.WriteConnection;

            string one = connectionStringOptions.ReadConnectionList[0].ToString();
            string two = connectionStringOptions.ReadConnectionList[1].ToString();
            string three = connectionStringOptions.ReadConnectionList[2].ToString();

            string writeConnection2 = connectionStringOptions2.WriteConnection;

            string one2 = connectionStringOptions2.ReadConnectionList[0].ToString();
            string two2 = connectionStringOptions2.ReadConnectionList[1].ToString();
            string three2 = connectionStringOptions2.ReadConnectionList[2].ToString();

            return View();
        }
    }
}

运行结果
在这里插入图片描述
在这里插入图片描述


四、自己没事捣鼓的读取json的通用方法(感觉很蠢需要优化)

/// <summary>
/// 解析json并返回值
/// </summary>
/// <param name="keyName">节点名称</param>
/// <param name="num">这个节点下面的第几个键值对的值</param>
/// <param name="jsonName">json文件的名称</param>
/// <returns></returns>
public static string GetJson(string keyName, int num, string jsonName)
{
    //解析josn
    StreamReader file = new StreamReader(Environment.CurrentDirectory + @"\" + jsonName);
    JObject jo = JObject.Parse(file.ReadToEnd());
    //根据key取value
    string json_value = jo.Properties().ToList().ToArray<JProperty>().Where(p => p.Name == keyName).ToArray<JProperty>().FirstOrDefault().Value.ToString().Split(',')[num].Split(":")[1].Replace("\"", "").Replace("\r\n", "").Replace("{", "").Replace("}", "");
    return json_value;
}

五、读取静态文件

当我们用《关于.NET
Core那些事(2)》中的cmd命令启动的时候,会发现项目启动后的样式与用VS启动的不一样,可以说是毫无样式,其中原因有两个:
1.看了《关于.NET Core那些事(1)》我们可知道.net core中css和js等文件都是放在wwwroot下面,但是项目生成的时候,并不会把wwwroot文件夹生成至bin目录下,所以导致样式文件缺失。
2.即使wwwroot拷贝到了bin目录下,默认的读取静态文件配置也会因为没有指定到具体文件夹导致读取失败,需要我们到Startup.cs更改一下配置

cmd启动修正前的样式
在这里插入图片描述

拷贝wwwroot文件夹至bin下
在这里插入图片描述
修改Startup.cs
在这里插入图片描述

//读取静态文件
app.UseStaticFiles(new StaticFileOptions()
{
    FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot"))
});

修改后cmd运行出来的样子
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

焦糖丨玛奇朵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值