怎么在asp.netcore中配置重新加载应用-创新互联

这篇文章给大家介绍怎么在asp.net core中配置重新加载应用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

创新互联是一家专业提供平鲁企业网站建设,专注与成都网站制作、成都做网站、HTML5建站、小程序制作等业务。10年已为平鲁众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。

asp.net core重新加载应用配置Intro

我把配置放在了数据库或者是Redis里,配置需要修改的时候我要直接修改数据库,然后调用一个接口去重新加载应用配置,于是就尝试写一个运行时重新加载配置的接口。

Configuration 重新加载实现

重新加载配置的接口其实很简单,经过看Configuration 的源码可以知道,如果想要重新加载应用配置,需要一个IConfigurationRoot 对象,而IConfigurationRoot 其实可以直接拿注入服务中的IConfiguration 对象,服务中的IConfiguration 对象也是实现了IConfigurationRoot 接口的实例。后面我们一起看源码就更清晰了。

来看实现重新加载配置的代码

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;

namespace TestWebApplication.Controllers
{
  [Route("api/[controller]")]
  public class ConfigurationsController : Controller
  {
    private readonly IConfigurationRoot _configuration;

    public ConfigurationsController(IConfiguration configuration)
    {
      _configuration = configuration as IConfigurationRoot;
    }

    [HttpGet]
    public IActionResult Get()
    {
      return Ok(new
      {
        RootUser = _configuration.GetAppSetting("RootUser") // 这里 GetAppSetting 是一个自定义扩展方法,获取AppSettings 节点下的配置信息
      });
    }

    [HttpPut]
    public IActionResult Put()
    {
      _configuration.Reload();
      return Ok();
    }
  }
}

是不是很简单,下面我们来尝试一下,你可以参考这个示例项目

因为默认的项目配置会监听 appsettings.json 文件是否修改,如果已修改就会重新reload,这里我新加一个文件,这里设置reloadOnChangefalse,示例代码如下:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
      WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration(configBuilder =>
        {
          configBuilder.AddJsonFile("abc.json", optional: true, reloadOnChange: false);
        })
        .UseStartup();

abc.json 的文件内容如下:

{
 "AppSettings": {
  "TestNumber": 12,
  "RootUser": "WeihanLi"
 }
}

dotnet run 启动网站,然后在浏览器中访问 http://localhost:5000/api/configurations

怎么在asp.net core中配置重新加载应用

然后我们修改 abc.json 文件

{
 "AppSettings": {
  "TestNumber": 12,
  "RootUser": "WeihanLi 123"
 }
}

修改保存之后刷新刚才的页面,可以看到还是刚才的内容,证明并没有重新加载配置,接下来尝试我们的重新加载配置方法

使用 postman 或 fiddler 或其他你喜欢的工具发一个 PUT 请求到http://localhost:5000/api/configurations,这里我使用 postman 调用 PUT 接口重新加载配置

怎么在asp.net core中配置重新加载应用

返回 200 即接口调用成功,重新刷新刚才的页面就可以看到页面上的数据已经发生变化,这也就证明了我们重新加载配置的接口生效了。

怎么在asp.net core中配置重新加载应用

源码解析

来看ConfigurationBuilder 在 Build 的时候做了什么,ConfigurationBuilder 源码

怎么在asp.net core中配置重新加载应用

可以看到这里最后返回的是一个IConfigurationRoot 对象,再来看IConfigurationRoot 源码

怎么在asp.net core中配置重新加载应用

可以看到IConfigurationRoot 定义了一个Reload 的方法,这个方法会从下面的Providers 中重新加载配置,看到这里我们就知道可以通过IConfigurationReload 方法来重新加载应用程序的配置了,然后我们来看WebHost.CreateDefaultBuilder(args).Build() 做了什么
https://github.com/aspnet/AspNetCore/blob/master/src/DefaultBuilder/src/WebHost.cs

怎么在asp.net core中配置重新加载应用

这里我们可以看到为什么 appsettings.json 文件会自动 reload 配置,可以看到最后返回了一个WebHostBuilder 对象

看 Asp.Net coreWebHostBuilder 对象的Build 方法 https://github.com/aspnet/AspNetCore/blob/master/src/Hosting/Hosting/src/WebHostBuilder.cs

BuildCommonServices 可以看到这样一段代码 https://github.com/aspnet/AspNetCore/blob/master/src/Hosting/Hosting/src/WebHostBuilder.cs

怎么在asp.net core中配置重新加载应用

上面我们已经知道ConfigurationBuilder Build 之后返回的是一个IConfigurationRoot 对象,而这里注入是一个IConfiguration 对象(IConfigurationRoot 实现IConfiguration 接口),所以我们就可以从依赖注入中获取IConfiguration 对象直接当作IConfigurationRoot 来使用,这也就是为什么我们会直接获取一个IConfiguration 对象直接as IConfigurationRoot

ASP.NET 是什么

ASP.NET 是开源,跨平台,高性能,轻量级的 Web 应用构建框架,常用于通过 HTML、CSS、JavaScript 以及服务器脚本来构建网页和网站。

关于怎么在asp.net core中配置重新加载应用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


分享文章:怎么在asp.netcore中配置重新加载应用-创新互联
文章位置:http://azwzsj.com/article/ccgghc.html