.NET Core开发实战(第12课:配置变更监听)--学习笔记

12 | 配置变更监听:配置热更新能力的核心

这一节讲解如何使用代码来监视配置变化并做出一些动作

当我们需要追踪配置发生的变化,可以在变化发生时执行一些特定的操作

配置主要提供了一个 GetReloadToken 方法,这就是跟踪配置的关键方法

接着使用上一节的代码

var builder = new ConfigurationBuilder();
builder.AddJsonFile("appsettings.json", optional:true, reloadOnChange:true);
var configurationRoot = builder.Build();

IChangeToken token = configurationRoot.GetReloadToken();

IChangeToken 有两个属性和一个方法

public interface IChangeToken
{
    bool HasChanged { get; }
    
    bool ActiveChangeCallbacks { get; }
    
    IDisposable RegisterChangeCallback(Action<object> callback, object state);
}

接着注册 Callback

token.RegisterChangeCallback(state =>
{
    Console.WriteLine($"Key1:{configurationRoot["Key1"]}");
    Console.WriteLine($"Key2:{configurationRoot["Key2"]}");
    Console.WriteLine($"Key3:{configurationRoot["Key3"]}");
}, configurationRoot);

启动程序,修改配置文件,触发 Callback

多次修改配置文件没有效果?

因为 IChangeToken 这个对象只能使用一次,也就是说捕获到变更并且执行代码之后,需要再重新获取一个新的 IChangeToken,再次注册

token.RegisterChangeCallback(state =>
{
    Console.WriteLine($"Key1:{configurationRoot["Key1"]}");
    Console.WriteLine($"Key2:{configurationRoot["Key2"]}");
    Console.WriteLine($"Key3:{configurationRoot["Key3"]}");

    token = configurationRoot.GetReloadToken();
    token.RegisterChangeCallback(state2 =>
    {
        Console.WriteLine();
    }, configurationRoot);
}, configurationRoot);

这将变成一个无限循环的过程,微软实际上提供了一个比较方便使用的快捷的扩展方法,这个方法可以帮助我们轻松地处理这件事,也就意味着每次触发完成以后可以重新绑定

ChangeToken.OnChange(() => configurationRoot.GetReloadToken(), () =>
{
    Console.WriteLine($"Key1:{configurationRoot["Key1"]}");
    Console.WriteLine($"Key2:{configurationRoot["Key2"]}");
    Console.WriteLine($"Key3:{configurationRoot["Key3"]}");
});

第一个参数是获取 IChangeToken 的方法

第二个参数是处理变更的注入方法

启动程序,修改配置文件,多次触发 Callback

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.NET Core中,当你的应用程序尝试从不同的域名或端口发送跨域请求时,可能会遇到CORS(跨域资源共享)问题。这是由于浏览器的安全策略所导致的。浏览器会发送一个预检请求(OPTIONS请求)来检查服务器是否允许跨域请求。如果服务器没有正确配置CORS,浏览器会阻止请求,并显示"has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource"的错误消息。 要解决这个问题,你可以在.NET Core应用程序中配置CORS。以下是一种常见的解决方法: 1. 在Startup.cs文件的ConfigureServices方法中,添加以下代码来配置CORS策略: ```csharp public void ConfigureServices(IServiceCollection services) { services.AddCors(options => { options.AddPolicy("AllowAll", builder => { builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); }); // 其他配置代码... } ``` 2. 在Startup.cs文件的Configure方法中,使用UseCors方法来启用CORS策略: ```csharp public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 其他配置代码... app.UseCors("AllowAll"); // 其他配置代码... } ``` 通过以上配置,你允许来自任何域名、任何HTTP方法和任何请求头的跨域请求。 请注意,这只是一种常见的解决方法,你可以根据你的具体需求进行配置。另外,还可以在服务器端配置响应头来解决CORS问题,具体方法取决于你使用的服务器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值