Можно ли изменить маршруты MVC после запуска? - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть .NET Core 2.1 Web API, который регистрирует пользовательские маршруты при запуске через метод MapRoute IRouteBuilder.Это происходит в методе Configure () при запуске.

Иногда эти маршруты необходимо изменить, и я хотел бы предотвратить перезапуск веб-API для добавления или удаления пользовательских маршрутов.Можно ли изменить таблицу маршрутов во время работы веб-сайта?

1 Ответ

0 голосов
/ 11 сентября 2018

Для пользовательского маршрутизатора динамически, вы можете попробовать IRouter.

Вот простая демонстрация для изменения маршрутизатора во время выполнения из файла appsettings.json.

  1. appsettings.json

    {
     "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
    },
     "AllowedHosts": "*",
     "Router": {
    "Controller": "Home",
    "Action": "Contact"
     }
    }   
    
  2. Пользовательский маршрутизатор RouterFromAppSettings

    public class RouterFromAppSettings : IRouter
    {
    private readonly IRouter _defaulRouter;
    private readonly IConfiguration _config;
    public RouterFromAppSettings(IRouter defaulRouter
        , IConfiguration config)
    {
        _defaulRouter = defaulRouter;
        _config = config;
    }
    public async Task RouteAsync(RouteContext context)
    {
        var controller = _config.GetSection("Router").GetValue<string>("Controller");
        var action = _config.GetSection("Router").GetValue<string>("Action");
        context.RouteData.Values["controller"] = controller;
        context.RouteData.Values["action"] = action;
        await _defaulRouter.RouteAsync(context);
    }
    public VirtualPathData GetVirtualPath(VirtualPathContext context)
    {
        return _defaulRouter.GetVirtualPath(context);
    }
    }
    
  3. Зарегистрируйте пользовательский маршрут

            app.UseMvc(routes =>
        {
            routes.Routes.Insert(0, new RouterFromAppSettings(routes.DefaultHandler,Configuration));
    
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    
  4. После запуска приложения вы можете изменить узел appsettings Router для перенаправления на другое действие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...