当前位置: 首页 > article >正文

在asp.net webapi项目中 将数据库连接字符串写在配置文件中,及Program配置Serilog存放路径以及设置

在asp.net webapi项目中
将数据库连接字符串(如 Data Source=D:\SqliteFile\fingerprint.db;Version=3;)写在配置文件中是一个良好的实践,因为它可以让你在不修改代码的情况下轻松更改数据库配置。以下是如何将数据库连接字符串配置到 appsettings.json 文件中的步骤:

1. 修改 appsettings.json

在 appsettings.json 文件中添加一个新的配置节,用于存储数据库连接字符串。

示例 appsettings.json:
json
复制

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "ConnectionStrings": {
    "FingerprintDb": "Data Source=D:\\SqliteFile\\fingerprint.db;Version=3;"
  }
}

关键点:
在 ConnectionStrings 节点下添加一个名为 FingerprintDb 的配置项,值为数据库连接字符串。

你可以根据需要修改路径(如 D:\SqliteFile\fingerprint.db)。

2. 读取配置文件中的连接字符串

在代码中,使用 IConfiguration 接口读取配置文件中的连接字符串。

修改 FingerService 构造函数:
csharp
复制

using Microsoft.Extensions.Configuration;

public class FingerService : IFingerService
{
    private readonly ILogger<FingerService> _logger;
    private readonly string _connectionString;

    public FingerService(ILogger<FingerService> logger, IConfiguration configuration)
    {
        _logger = logger;
        _connectionString = configuration.GetConnectionString("FingerprintDb"); // 从配置文件中读取连接字符串
    }

    // 其他代码...
}

关键点:
通过 IConfiguration 接口读取 appsettings.json 中的 ConnectionStrings:FingerprintDb。

将读取到的连接字符串存储在 _connectionString 字段中。

3. 使用配置的连接字符串

在需要使用数据库连接字符串的地方,替换硬编码的字符串为从配置文件中读取的值。

示例:SaveFingerprintTemplateToDatabase 方法
csharp
复制

private async Task<bool> SaveFingerprintTemplateToDatabase(int userId, byte[] template)
{
    try
    {
        using (SQLiteConnection conn = new SQLiteConnection(_connectionString)) // 使用配置的连接字符串
        {
            // 其他代码...
        }
     }
}

关键点:
使用 _connectionString 替换硬编码的连接字符串。

总结

通过将数据库连接字符串配置到 appsettings.json 文件中,并使用 IConfiguration 接口读取配置,你可以:

避免硬编码连接字符串,提高代码的可维护性。

轻松更改数据库配置,而无需修改代码。

支持不同的环境(如开发、测试、生产)使用不同的数据库配置。

这样,你的代码将更加灵活和健壮。


Program配置Serilog存放路径以及设置

你可以将 Serilog 的日志文件路径和配置参数(如日志文件路径、滚动策略等)配置到 appsettings.json 文件中,然后在代码中读取这些配置。以下是实现步骤:

1. 修改 appsettings.json

在 appsettings.json 文件中添加一个新的配置节,用于存储 Serilog 的配置。

示例 appsettings.json:
json
复制

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "Serilog": {
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "D:/Log/fingerprint/finger.log", // 日志文件路径
          "rollingInterval": "Day", // 按天滚动
          "fileSizeLimitBytes": 10485760, // 文件大小限制为 10MB
          "rollOnFileSizeLimit": false, // 文件大小达到限制时,继续写入当前文件
          "retainedFileCountLimit": 30 // 保留最近 30 个日志文件
        }
      }
    ],
    "Filter": {
      "ByExcluding": {
        "Name": "ByExcluding",
        "Args": {
          "expression": "Contains(SourceContext, 'Microsoft')"
        }
      }
    }
  }
}

关键点:
Serilog 节点用于配置 Serilog 的参数。

WriteTo 配置日志输出目标(如文件)。

Filter 配置日志过滤规则(如过滤掉 Microsoft 的日志)。

2. 配置 Serilog 读取配置文件

在 Program.cs 中配置 Serilog,使其从 appsettings.json 文件中读取配置。

示例 Program.cs:
csharp
复制

using Serilog;
using Serilog.Settings.Configuration;

var builder = WebApplication.CreateBuilder(args);

// 配置 Serilog
builder.Host.UseSerilog((context, services, configuration) => configuration
    .ReadFrom.Configuration(context.Configuration) // 从 appsettings.json 读取配置
    .Enrich.FromLogContext()
      .Filter.ByExcluding(logEvent => logEvent.Properties.TryGetValue("SourceContext", out var sourceContext) && sourceContext.ToString().Contains("Microsoft")) // 过滤掉 Microsoft 的日志
    .WriteTo.Console() // 保留控制台日志输出
);

// 其他服务配置…

var app = builder.Build();

app.Run();
关键点:
使用 ReadFrom.Configuration(context.Configuration) 从 appsettings.json 读取 Serilog 配置。

WriteTo.Console() 保留控制台日志输出。

3. 结果

Serilog 会根据 appsettings.json 中的配置自动写入日志文件。

日志文件路径、滚动策略、文件大小限制等参数都可以通过配置文件灵活调整。

框架的日志(如 Microsoft 的日志)会被过滤掉,只保留你手动编写的日志。

4. 总结

通过将 Serilog 的配置参数(如日志文件路径、滚动策略等)配置到 appsettings.json 文件中,并使用 ReadFrom.Configuration 读取配置,你可以:

避免硬编码日志配置,提高代码的可维护性。

轻松更改日志配置,而无需修改代码。

支持不同的环境(如开发、测试、生产)使用不同的日志配置。

这样,你的代码将更加灵活和健壮。


http://www.kler.cn/a/457271.html

相关文章:

  • 【从零开始入门unity游戏开发之——C#篇43】C#补充知识——值类型和引用类型汇总补充、变量的生命周期与性能优化、值类型和引用类型组合使用
  • 制造BOM的应用思考
  • R语言6种将字符转成数字的方法,写在新年来临之际
  • android app构建时排除指定类
  • 前端超大缓存IndexDB、入门及实际使用
  • 3D数学基础2
  • JavaWeb期末复习
  • Wordly Wise 3000 国际背单词01 介绍 + 测词汇量
  • 【Beats01】企业级日志分析系统ELK之Metricbeat与Heartbeat 监控
  • Python 占位符详细笔记
  • C语言的数据结构
  • vue3 video 播放rtmp视频?(360浏览器支持)
  • mysql系列7—Innodb的redolog
  • 分布式版本管理工具——git中分支的相关知识
  • Webpack在Vue CLI中的应用
  • 7.即时通讯
  • 深度学习中batch_size
  • MySQL并发问题区别-MVCC如何解决的
  • Linux 下 Mamba 环境安装踩坑问题汇总(重置版)
  • 【前端】Vue3 父传子 Dialog 显示问题:解决方案与最佳实践
  • 狼人杀.转载
  • 神经网络初学总结(一)
  • 国密算法SM3的GmSSL代码Android实现Demo
  • 【Leecode】Leecode刷题之路第93天之复原IP地址
  • 使用Python实现智能交通信号控制系统
  • 深度学习笔记(12)——深度学习概论