Aza*_*Aza 8 c# .net-core asp.net-core asp.net-core-2.2 .net-core-2.2
在我的 .net core mvc (2.2) 应用程序中,我有一个从数据库配置的配置。如何从控制器重新加载配置,例如在更改数据库中的某些值后?我已经尝试过类似的方法,但它不起作用:
我的配置.cs:
public class MyConfiguration
{
public string SmtpServer {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
启动.cs:
public class Startup
{
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.Configure<MyConfiguration>(options => {
options.SmtpServer = Configuration["SmtpServer"];
});
// ...
services.AddSingleton<IConfiguration>(Configuration);
}
}
Run Code Online (Sandbox Code Playgroud)
程序.cs:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost
.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(Directory.GetCurrentDirectory());
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
config.AddEFConfiguration(options => options.UseNpgsql("connection_string"));
config.AddCommandLine(args);
})
.UseStartup<Startup>();
}
Run Code Online (Sandbox Code Playgroud)
控制器:
public class TestController : ControllerBase
{
private readonly IConfigurationRoot _configurationRoot;
public TestController(IConfiguration configurationRoot)
{
_configurationRoot = (IConfigurationRoot)configurationRoot;
}
[HttpGet]
public async Task<IActionResult> Index()
{
// some logic for updating values in the database
// Doesn't work
_configurationRoot.Reload();
return Ok();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 2
重新加载/刷新配置。
private IConfigurationRoot configRoot { get; set; }
private IOptionsSnapshot<**your config class**> IConfigurationAdapter;
public XYZController(IOptionsSnapshot<**your config class**> configurationAdapter,IConfiguration con)
{
if (configurationAdapter != null)
this.IConfigurationAdapter = configurationAdapter;
this.configRoot = con as IConfigurationRoot;
}
[HttpGet("/Reload")]
public IActionResult Reload()
{
if (configRoot != null)
{
configRoot.Reload();
return Ok("Application ConfigurationSetting Refreshed...!");
}
else
{
return Ok("Application ConfigurationSetting Not Refreshed...!");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10356 次 |
| 最近记录: |