Как мне сопоставить маршрут с заблокированными значениями параметров контроллера в ASP.Net Core? - PullRequest
0 голосов
/ 11 июня 2019

У меня есть базовый контроллер ASP.Net Core, где я хочу, чтобы он выполнял другую операцию в зависимости от маршрута. Моя идея состояла в том, чтобы отобразить разные маршруты для использования одного и того же контроллера, где каждое сопоставление будет устанавливать разные режимы в зависимости от маршрута. http://Website/Route1 будет соответствовать Mode1, а http://Website/Route2 будет соответствовать Mode2

            routes.MapRoute(
name: “Route1”,
template: “Route1” + "/{*queryParameters}",
defaults: new { controller = "GenericProcess", action = "RunGenericProcess", mode = “Mode1”, }
);


            routes.MapRoute(
name: “Route2”,
template: “Route2” + "/{*queryParameters}",
defaults: new { controller = "GenericProcess", action = "RunGenericProcess", mode = “Mode2”, }
);

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

http://Website/Route1/?mode=Mode2

Можно ли как-то указать жесткие значения для сопоставления маршрута вместо значений по умолчанию, которые могут быть переопределены? Есть ли другой способ для достижения моей конечной цели, а именно создание многоцелевого контроллера, который позволяет мне определять режим на основе маршрута?

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Это не прямой ответ на ваш вопрос, но, по моему скромному мнению и опыту, это не лучшая вещь.Я мог бы предположить, что ваш «режим» в URL приведет к некоторому действию, поэтому вы по сути кодируете действие в строке запроса.Было бы лучше использовать атрибутную маршрутизацию и иметь один контроллер на действие, что облегчит чтение, тестирование и обслуживание.Эта концепция следует принципу единой ответственности (ищите принципы SOLID).

Всего наилучшего в ваших приключениях по кодированию: -)

0 голосов
/ 12 июня 2019

Попробуйте код ниже с ядром asp.net mvc netcoreapp2.2.

  1. Startup.cs

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
            routes.MapRoute(
                name: "Route1",
                template: "Route1" +"/{*queryParameters}",
                defaults: new { controller = "GenericProcess", action = "RunGenericProcess", mode = "Mode1", }
                );
    
    
            routes.MapRoute(
                name: "Route2",
                template: "Route2" +"/{*queryParameters}",
                defaults: new { controller = "GenericProcess", action = "RunGenericProcess", mode = "Mode2", }
                );
        });
    
  2. Controller

    public class GenericProcessController : Controller
    {
            public IActionResult RunGenericProcess(string mode)
            {
            return Ok(mode);
            }
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...