栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

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

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

.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();
    }
}


二、通过实体类读取节点

定义与配置文件中需要获取的标签结构完全一致的实体类: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(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 optionsMonitor, 
            IOptions 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的通用方法(感觉很蠢需要优化)
/// 
/// 解析json并返回值
/// 
/// 节点名称
/// 这个节点下面的第几个键值对的值
/// json文件的名称
/// 
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().Where(p => p.Name == keyName).ToArray().FirstOrDefault().Value.ToString().Split(',')[num].Split(":")[1].Replace(""", "").Replace("rn", "").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运行出来的样子

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/904421.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号