.net ядро ​​пользовательской маршрутизации с параметром GET

.Net Core MVC, предположим, что пользовательский маршрут выглядит примерно так:

App.UseMvc(routes =>
{
  routes.MapRoute(
  name: "fantasyBoardArea",
  //constraints: "{area=FantasyDraftBoard}/{controller=Test}/{league?}/{id}",
                  template: "{area=FantasyDraftBoard}/{leagueName?}/{controller=Test}/{action=Index}/{search?}");
});

Есть ли способ установить его так, чтобы, если {leagueName} в маршруте выше было одной из 4 строк (NHL, NFL, NBA, MLB), я хочу использовать типичный маршрут (area/controller/action/(queryParamters)), но ТАКЖЕ используйте leagueName в качестве параметра маршрута на моем контроллере? Я не против, чтобы URL маршрута выглядел как "domainname.com/FantasyDraftBoard/NHL/Controller/Action/", Было бы хорошо, если бы он все еще скрывал "Index", когда это действие Index

например:

[Area("FantasyDraftBoard")]
public class TestController : Controller
{      
    public async Task<IActionResult> Index(string leagueName, string search)
    {
       if(!String.IsNullOrEmpty(leagueName)
       {
           //do something
       }
       //Code removed, not important
    }

Если имя leagueName не совпадает ни с одной из этих четырех строк, я хочу, чтобы оно игнорировалось и рассматривалось как обычный маршрут контроллера / действия.

Примечание. Не обращайте внимания на ограничения в моем маршруте наверху, это было только для тестирования и тестирования.

Мысли?

1 ответ

  app.UseMvc(routes =>
        {
            routes.MapRoute(
                        "New",
                        "{area:exists}/{leagueName?}/{controller}/{action}/{id?}",
                        new { leagueName= "NHL", controller = "Default", action = "Index" },
                        new { leagueName= "NHL|NFL" }
                    );
            routes.MapRoute(
                name: "areaRoute",
                template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");

            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

   [Area("FantasyDraftBoard")]
   public class DefaultController : Controller
   {
    public IActionResult Index(string leagueName)
    {
        return View();
    }
   }

Я проверил, что leagueName установлено в одно из значений.

РЕДАКТИРОВАТЬ: Если значение отсутствует, тогда имя leaguename устанавливается в NULL, но если оно содержит значения, отличные от этих 4, то возвращает 404

Другие вопросы по тегам