0

.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),那么我希望它使用典型路线(区域/控制器/动作/(queryParamters ),但也使用 LeagueName 作为我的控制器上的路由参数?我不介意路由 URL 看起来像"domainname.com/FantasyDraftBoard/NHL/Controller/Action/"。如果它在索引操作时仍然隐藏“索引”会很好

前任:

[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与这四个字符串之一不匹配,那么我希望它被忽略并将其视为常规控制器/动作路由。

注意 - 忽略顶部路线中的限制,这只是为了测试和尝试。

想法?

4

1 回答 1

0
  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 设置为其中一个值。

编辑:如果该值不存在,则联赛名称设置为 NULL 但如果它包含除这 4 之​​外的值,则返回 404

于 2018-07-25T07:30:12.120 回答