配置文件,是一个每个应用服务程序常用的功能,从原来的终端应用时代,到现在的元宇宙时代,配置都是很悠然自得的存在。asp.net core提供了强大的配置文件访问机制,不管是MVC API还是MiniAPI,使用方式都是相同的。

框架默认的配置文件是:appsettings.json,可以以json的格式存放自己复杂的配置:

{"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHosts": "*","ConnectionStrings": {"ExamDatabase": "server=.;database=Exam;uid=sa;pwd=sa;"},"AppInfo": {"Name": "Mini & Powerful","Version": "v1.0.0","Author": {"Architect": "桂素伟-A","Programmer": "桂素伟-P","Designer": "桂素伟-D"},"Features": [ "Learn MiniAPI", "Architect Element" ]}
}

简单取值

var architect = builder.Configuration.GetSection("AppInfo:Author:Architect").Value;
var features1=builder.Configuration.GetSection("AppInfo:Features:1").Value;

用record绑定

record

public record AppInfoRecord(string? Name, string? Version, AuthorRecord? Author, string[]? Features);
public record AuthorRecord(string? Architect, string? Programmer, string? Designer);

绑定

var authorRecord = new AuthorRecord(null, null, null);
var appInfoRecord = new AppInfoRecord(null, null, authorRecord, null);
builder.Configuration.GetSection("AppInfo").Bind(appInfoRecord);

结果

用class绑定

class

public class AppInfo
{public string? Name { get; set; }public string? Version { get; set; }public Author? Author { get; set; }public string[]? Features { get; set; }
}
public class Author
{public string? Architect { get; set; }public string? Programmer { get; set; }public string? Designer { get; set; }
}

绑定

var appInfo = new AppInfo();
builder.Configuration.GetSection("AppInfo").Bind(appInfo);

结果

用record和class绑定各有优势,record定义的时间代码简单,绑定要复杂一些,class正好相反,定义要复杂一些,绑定时简单。

从IConfiguration中获取配置

可以在路由方法中获取配置信息

app.MapGet("/getappinfo", (IConfiguration config) =>
{return config.GetSection("AppInfo:Name").Value;
});

从路由中取配置文件

首选注入

var authorRecord = new AuthorRecord(null, null, null);
var appInfoRecord = new AppInfoRecord(null, null, authorRecord, null);
builder.Configuration.GetSection("AppInfo").Bind(appInfoRecord);
builder.Services.AddSingleton(appInfoRecord);

取配置数据

app.MapGet("/appinfo", (AppInfoRecord appinfo) =>
{return appinfo;
});

结果

读取其他格式的配置文件

myconfig.ini

[iniconfig]
key1=value1
key2=value2

加载配置文件,并取值

builder.Host.ConfigureAppConfiguration((hostingContext, config) =>
{config.AddIniFile("myconfig.ini",optional: true,reloadOnChange: true);
});var key1=builder.Configuration.GetSection("iniconfig:key1").Value;

.NET6之MiniAPI(四):配置相关推荐

  1. .NET6之MiniAPI(三十):结束篇(附链接)

    不知不觉来到了<.NET6之MiniAPI>的第三十篇,回顾之前的篇幅,主要涉及如下: HTTP请求,应答 Request 桂素伟,公众号:桂迹.NET6之MiniAPI(二):reque ...

  2. .NET6之MiniAPI(十九):NLog

    在本系例文章的第八篇中,我们聊过官方的日志实现,即<.NET6之MiniAPI(八):日志>.但官方的日志功能更多是提供了一个实现基础,对于要求一个灵活,强大,方便的日志体系,官方的还是有 ...

  3. .NET6之MiniAPI(十四):跨域CORS(上)

    为了说明跨请求,创建了两个项目,一个mini api,端口是5001,另一个razor page项目,端口是5280.5280项目会在页面用ajax的方式来请求5001,形成跨域请求,由于是本地测试, ...

  4. .NET6之MiniAPI(二十四):用Polly重试

    为了保障系统的稳定和安全,在调用三方服务时,可以增加重试和熔断.重试是调用一次失败后再试几试,避免下游服务一次闪断,就把整个链路终止:熔断是为了防止太多的次数的无效访问,导致系统不可知异常. Poll ...

  5. .NET6之MiniAPI(二十七):Metrics

    应用的各种Metrics是保证应用健康稳定运行的基础,特别对于一些可用性有所要求的应用,本文介绍prometheus-net这个三方指示库. prometheus-net的工作原理是,在应用内部埋点, ...

  6. Linux学习之CentOS(三十四)--配置域主DNS服务器

    在上一篇随笔里 Linux学习之CentOS(三十三)--DNS基础及域名系统架构,讲解了DNS的一些基础知识以及域名系统架构,在本篇随笔里将详细地讲解主DNS服务器的配置... 一.DNS服务器的类 ...

  7. .NET6之MiniAPI(二十九):UnitTest

    MiniAPI的单元测试与asp.net web api的单元测试大体是相同的(毕竟都是asp.net core),只是在小细节上有一些差异,文章中会说到这点. 本文测试框架是XUnit,Mock框架 ...

  8. .NET6之MiniAPI(十八):OpenAPI swagger

    从本篇开始,介绍一些很不错的三方库,来丰富MiniAPI的使用. 在创建MiniAPI项目时,模板提供了一个是否启用OpenAPI的选项,足见这个三方库的优势和强大. OpenAPI为我们测试API提 ...

  9. .NET6之MiniAPI(十二):引入EntityFramewor

    说明:本篇重点说明MiniAPI引入EntityFramework,EF的使用不是本篇的重点 本篇是在MiniAPI中使用EntityFramework,所以先奉上创建数据的脚本,数据库是SQL Se ...

最新文章

  1. java mongo 日期范围_java – 在mongodb中按日期对值排序
  2. 服务端异步IO配合协程浅析
  3. 微软旷视人脸识别100%失灵!北京十一学校校友新研究「隐身衣」,帮你保护照片隐私数据...
  4. MAC下 Apache服务器配置
  5. Required request body is missing 错误
  6. VTK:VTK 的相机模型用法实战
  7. 关于js中function(e) e的理解
  8. 微机原理控制转移类指令
  9. php用到的mysql语句_PHP中常用到的一些MySQL语句_php
  10. Qt文档阅读笔记-QTcpServer官方解析与实例(使用QSocket创建简单的HTTP服务器)
  11. java 课后习题 编写判断从键盘输入的字符串是否为回文
  12. oracle procedures批量删除带索引条件数据很慢_redis数据结构、持久化、缓存淘汰策略...
  13. mysql 5.6 没死_MySQL 5.6不删空用户的影响
  14. ztree 加搜索框_zTree添加搜索
  15. Python3-word文档操作(七):提取word文档中的图片方式一-利用word文档的压缩文件属性
  16. KALI安装软件链接不上源,数字签名软件保护,Kali Linux 更新源 数字签名无效处理
  17. java 世界杯自动分组_2018世界杯分组抽签详解
  18. 润雅信息完成B轮融资 大数据平台赋能汽车销售 1
  19. 吉布斯采样(Gibbs Sampling)及相关算法
  20. Javascript Prototype污染攻击(原型链污染,Bugku-web-sodirty wp)

热门文章

  1. 个人博客作业_week2
  2. 关于构造函数和this调用的思考
  3. centos安装vsftp后的虚拟用户设置
  4. SQL2K数据库开发十五之表操作查看表中的数据
  5. MySQL数据库入门到高薪培训教程(从MySQL 5.7 到 MySQL 8.0)
  6. Alamofire源码导读二:发起请求及内部加锁的逻辑
  7. Ubuntu防火墙:ufw
  8. Java多线程之静态代理
  9. asp.net core结合NLog搭建ELK实时日志分析平台
  10. 3、面向对象-继承-多态