相关疑难解决方法(0)

Microsoft.Extensions.Configuration的reloadOnChange如何为appsettings.json工作

在两个项目(.NET Core Web API和.NET Core WindowsService)中,我使用appsettings.json进行配置.

 var configuration = new ConfigurationBuilder()
           .SetBasePath(System.IO.Directory.GetCurrentDirectory())
           .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
           .AddEnvironmentVariables()
           .Build();
Run Code Online (Sandbox Code Playgroud)

在两者中,我将reloadOnChange设置为true并使用它作为IOptions依赖注入注入.在web api中进入控制器类,在服务内进入使用设置的类.

不幸的是,我发现appsettings.json更改时值不会改变.

在web api上,我创建了一个控制器,只是从配置中返回一个字符串值,这与启动时保持一致.

所以我的问题:

  1. 任何人都知道这是否应该开箱即用(至少在网络API中)?
  2. 有什么我必须做的吗?

json appsettings .net-core asp.net-core asp.net-core-webapi

15
推荐指数
1
解决办法
4595
查看次数

带有IOptionsSnapshot的ASP.NET核心配置reloadOnChange仍然没有响应

我正在使用ASP.NET Core 2.0,我在Main方法中有这样的配置代码:

public static void Main(string[] args)
{
    var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
    var configuration = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{environment ?? "Production"}.json", optional: true, reloadOnChange: true)
        .AddEnvironmentVariables()
        .AddCommandLine(args)
        .Build();
}
Run Code Online (Sandbox Code Playgroud)

我将reloadOnChange设置为true,并在我的控制器中使用IOptionsSnapshot

public HomeController(ILogger<HomeController> logger, IOptionsSnapshot<AppSettings> options)
Run Code Online (Sandbox Code Playgroud)

但是当我修改我的值时appsettings.json,我必须每次都重新启动我的应用程序,或者只是通过刷新浏览器来获取更改.我究竟做错了什么?我试图用控制台和IIS Express运行应用程序; 我也尝试过IOptionsMonitor,同样的事情.顺便问一下,IOptionsMonitor和之间的区别是IOptionsSnapshot什么?

configuration asp.net-core-mvc asp.net-core

10
推荐指数
1
解决办法
6882
查看次数