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

这篇具有很好参考价值的文章主要介绍了.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();
    }
}

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


二、通过实体类读取节点

定义与配置文件中需要获取的标签结构完全一致的实体类: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();
        }
    }

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


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

用到的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中的配置
.NET学习笔记----关于.NET Core那些事(3)【配置文件的读取、json文件的通用解析、读取静态文件】

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

    services.AddControllersWithViews();
}

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

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

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


四、自己没事捣鼓的读取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启动修正前的样式
.NET学习笔记----关于.NET Core那些事(3)【配置文件的读取、json文件的通用解析、读取静态文件】

拷贝wwwroot文件夹至bin下
.NET学习笔记----关于.NET Core那些事(3)【配置文件的读取、json文件的通用解析、读取静态文件】
修改Startup.cs
.NET学习笔记----关于.NET Core那些事(3)【配置文件的读取、json文件的通用解析、读取静态文件】

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

修改后cmd运行出来的样子
.NET学习笔记----关于.NET Core那些事(3)【配置文件的读取、json文件的通用解析、读取静态文件】文章来源地址https://www.toymoban.com/news/detail-445113.html

到了这里,关于.NET学习笔记----关于.NET Core那些事(3)【配置文件的读取、json文件的通用解析、读取静态文件】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • .NET 6和.Net Core学习笔记:.NET Core的重要问题

    什么是C#? .NET中主要的开发语言。 推荐C#书籍:《C#图解教程》,《C#入门经典》 尽管绝大部分用法都没变,但是.NET Core不是 .NET Framework的升级版,无法直接升级 绝大部分用法没有变,但又有部分是不能使用的。 又被微软坑了? .NET Framework白学了? 软件开发界的技术是不断

    2024年02月04日
    浏览(39)
  • .NET Core基础到实战案例零碎学习笔记

    .NET Core基础到实战案例零碎学习笔记

    前言:前段时间根据 [老张的哲学] 大佬讲解的视频做的笔记,讲的很不错。此文主要记录JWT/DI依赖注入/AOP面向切面编程/DTO/解决跨域等相关知识,还包含一些.NET Core项目实战的一些案例。我是西瓜程序猿,感谢大家的支持! 1.1.1-.NET Croe简介 (1)为什么要学习.NET Core? .NET

    2024年02月12日
    浏览(7)
  • asp.net core在发布时排除配置文件

    使用命令发布 dotnet restore dotnet publish -c Release -r win-x64 -o \\\"D:services\\\"  这样发布总是是将配置文件覆盖  这时候打开项目.csproj新增配置文件

    2024年04月24日
    浏览(5)
  • Asp.NET Core WebAPI 入门学习笔记,超详细

    Asp.NET Core WebAPI 入门学习笔记,超详细

    WebAPI 是一种传统的方式,用于构建和暴露 RESTUI风格的Web服务。它提供了丰富的功能和灵活性,可以处理各种HTTP请求,并支持各种数据格式,如JSON、XML等。 WebAPI使用控制器(Controllers)和动作方法(ActionMethods)的概念、通过路由配置将请求映射到相应的方法上。 开发人员可以使用

    2024年04月24日
    浏览(38)
  • .net core 生成项目时.json配置文件没有复制到输出目录

    .net core 生成项目时.json配置文件没有复制到输出目录

    在程序运行时默认加载.exe文件同文件夹下的配置文件,而不是项目中的.json配置文件,所以需要把.json配置文件设置到自动生成目录,即下图所示:

    2023年04月13日
    浏览(11)
  • ASP.NET Core 3.1系列(4)——读写配置文件appsettings.json

    ASP.NET Core 3.1系列(4)——读写配置文件appsettings.json

    在大多数的应用程序中,一些参数需要写在配置文件里,以此增加系统的灵活性。在 ASP.NET 时代,配置参数一般会写在 web.config 文件中,其本质上是对 XML 文件的读取和写入。而在 ASP.NET Core 中,配置文件变成了 appsettings.json 文件。相较于 XML , JSON 文件更加轻量且灵活,下面

    2024年02月06日
    浏览(13)
  • .net core读取Response.Body

    读取请求体流的demo 报错,一般是在Request.Body处报NotSupportedException 在自定义中间件中调用 EnableBuffering() (移除以上正确方案代码) 为什么在 ActionFilterTestA 中调用 context.HttpContext.Request.EnableBuffering(); 没有效果?(没有报错,但是内容为空字符串) 猜测 请求体流在ActionFilter之

    2024年02月08日
    浏览(8)
  • 【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明

    【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年04月12日
    浏览(12)
  • .NET配置文件大揭秘:轻松读取JSON、XML、INI和环境变量

    .NET配置文件大揭秘:轻松读取JSON、XML、INI和环境变量

      概述: .NET中的IConfiguration接口提供了一种多源读取配置信息的灵活机制,包括JSON、XML、INI文件和环境变量。通过示例,清晰演示了从这些不同源中读取配置的方法,使配置获取变得方便且易于扩展。这种方式适用于不同场景,如API密钥、数据库连接等,为应用提供了高度

    2024年02月20日
    浏览(9)
  • 由ASP.NET Core读取Response.Body引发的思考

    由ASP.NET Core读取Response.Body引发的思考

        前几天有群友在群里问如何在我之前的文章《ASP.NET Core WebApi返回结果统一包装实践》的时候有点疑问,主要的疑问点就是关于Respouse的读取的问题。在之前的文章《深入探究ASP.NET Core读取Request.Body的正确方式》曾分析过关于Request的读取问题,需要读取Response的场景同样

    2023年04月10日
    浏览(6)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包