一、直接读取
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<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文章来源:https://www.toymoban.com/news/detail-445113.html
//读取静态文件
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot"))
});
修改后cmd运行出来的样子文章来源地址https://www.toymoban.com/news/detail-445113.html
到了这里,关于.NET学习笔记----关于.NET Core那些事(3)【配置文件的读取、json文件的通用解析、读取静态文件】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!