Первый вопрос: database
означает, что вы говорите: I add another route to the database
, и вы можете сохранить свои маршруты в файле JSON, XML или INI.
Если вы можете, например, сохранить маршруты в файле формата JSON, то возможно для маршрутов динамически доступны во время выполнения (as you can read in the ASP.NET Core Documentation)
You can find a full blog post about this here.
Предполагая, что routes.json
является JSON-файл со структурой, подобное следующему, и находится в той же папке, Startup
:
{
"route": "This is a route",
"another-route": "This is another route",
"default": "This is default!"
}
Вы можете настроить Startup
класс следующим образом:
Обратите внимание, что в этом примере не используется MVC, а отдельный пакет маршрутизации, хотя я предполагаю, что вы можете перенести его для работы с MVC.
public class Startup
{
public IConfiguration Configuration {get;set;}
public Startup(IHostingEnvironment env)
{
var configurationBuilder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("routes.json", optional: false, reloadOnChange: true);
Configuration = configurationBuilder.Build();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddRouting();
}
public void Configure(IApplicationBuilder app)
{
var routeBuilder = new RouteBuilder(app);
routeBuilder.MapGet("{route}", context =>
{
var routeMessage = Configuration.AsEnumerable()
.FirstOrDefault(r => r.Key == context.GetRouteValue("route")
.ToString())
.Value;
var defaultMessage = Configuration.AsEnumerable()
.FirstOrDefault(r => r.Key == "default")
.Value;
var response = (routeMessage != null) ? routeMessage : defaultMessage;
return context.Response.WriteAsync(response);
});
app.UseRouter(routeBuilder.Build());
}
}
На данный момент, в то время как приложение запущено, вы можете изменить файл JSON, сохраните его, а затем из-за параметра reloadOnChange: true
, структура будет инжектируем новую конфигурацию в Configuration
свойства.
Реализация перезагрузки основана на наблюдателе файлов, поэтому, если вы хотите использовать базу данных для этого - SQL Server, то я думаю, что вам нужно реализовать это самостоятельно.
A (совсем не совсем и напомнил здесь только для полноты) решение может заключаться в создании консольного приложения, которое добавляет изменения в файл в файл, а затем использует этот файл в конфигурации приложения.
С уважением!
Что является источником конфигурации? Вы упомянули базу данных, это SQL? Можете ли вы получить маршруты из файла JSON? –
На самом деле это коллекция mongoDB с метаданными маршрута –