#asp.net-mvc #asp.net-core-3.1 #.net-core-3.1 #azure-app-configuration
#asp.net-mvc #asp.net-ядро-3.1 #.net-core-3.1 #azure-app-configuration
Вопрос:
Что я пытаюсь сделать: я настроил конфигурацию приложения Azure с помощью веб-приложения .net core 3.1 mvc с помощью контрольного ключа в конфигурации приложения Azure, с целью того, чтобы по мере обновления значений разных ключей вместе с их контрольными ключами обновленное значение должно отражаться в моем приложении mvc без обновления Страницы.
В чем моя проблема: когда я делаю это с помощью RefreshAll: true внутри опции dependency Injection в моем классе Program.cs, я могу просмотреть изменения в своем приложении после обновления страницы, но я хочу увидеть изменения, как только я обновлю значение ключа в моей службе конфигурации приложения (без обновления страницы)
Документация, на которую я ссылаюсь: https://learn.microsoft.com/en-us/azure/azure-app-configuration/enable-dynamic-configuration-aspnet-core?tabs=core3x#reload-data-from-app-configuration Я создал приложение, используя только приведенную выше ссылку. Моя среда: использование dot net core 3.1, запускаемого из Visual Studio Enterprise 2019
Мой код: Programe.cs —
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
{
var settings = config.Build();
config.AddAzureAppConfiguration(options =>
{
options.Connect(settings["ConnectionStrings:AppConfig"])
.ConfigureRefresh(refresh =>
{
refresh.Register("TestApp:Settings:Sentinel", refreshAll: true)
.SetCacheExpiration(new TimeSpan(0, 0, 1));
});
});
})
.UseStartup<Startup>());
Добавлен класс Setting.cs :
namespace TestAppConfig
{
public class Settings
{
public string BackgroundColor { get; set; }
public long FontSize { get; set; }
public string FontColor { get; set; }
public string Message { get; set; }
}
}
в Startup.cs изменен метод ConfigureService :
public void ConfigureServices(IServiceCollection services)
{
services.Configure<Settings>(Configuration.GetSection("TestApp:Settings"));
services.AddControllersWithViews();
}
Также обновлен метод настройки как :
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
// Add the following line:
app.UseAzureAppConfiguration();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
Мой класс HomeController :
public class HomeController : Controller
{
private readonly Settings _settings;
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger, IOptionsSnapshot<Settings> settings)
{
_logger = logger;
_settings = settings.Value;
}
public IActionResult Index()
{
ViewData["BackgroundColor"] = _settings.BackgroundColor;
ViewData["FontSize"] = _settings.FontSize;
ViewData["FontColor"] = _settings.FontColor;
ViewData["Message"] = _settings.Message;
return View();
}
// ...
}
Индекс.cshtml :
<!DOCTYPE html>
<html lang="en">
<style>
body {
background-color: @ViewData["BackgroundColor"]
}
h1 {
color: @ViewData["FontColor"];
font-size: @ViewData["FontSize"]px;
}
</style>
<head>
<title>Index View</title>
</head>
<body>
<h1>@ViewData["Message"]</h1>
</body>
</html>
Дайте мне знать , можно ли этого достичь и как .
Заранее спасибо
Ответ №1:
В реальном мире при изменении конфигурации новые пользователи вашего веб-приложения увидят изменения. Если вы хотите увидеть изменения без обновления страницы, вам придется использовать javascript или AJAX для автоматического обновления страницы, например, по таймеру. Это ничем не отличается, когда что-либо изменяется на стороне сервера, независимо от того, конфигурация это или что-то еще.