Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有GET参数的.net核心自定义路由_C#_.net_Asp.net Core_Asp.net Mvc Routing_Mvcroutehandler - Fatal编程技术网

C# 带有GET参数的.net核心自定义路由

C# 带有GET参数的.net核心自定义路由,c#,.net,asp.net-core,asp.net-mvc-routing,mvcroutehandler,C#,.net,Asp.net Core,Asp.net Mvc Routing,Mvcroutehandler,.Net Core MVC,假设自定义路由如下所示: App.UseMvc(routes => { routes.MapRoute( name: "fantasyBoardArea", //constraints: "{area=FantasyDraftBoard}/{controller=Test}/{league?}/{id}", template: "{area=FantasyDraftBoard}/{leagueName?}/{con

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

例:

[区域(“幻想板”)]
公共类TestController:控制器
{      
公共异步任务索引(字符串联盟名称、字符串搜索)
{
如果(!String.IsNullOrEmpty(leagueName)
{
//做点什么
}
//代码已删除,不重要
}
如果leagueName与这四个字符串中的一个不匹配,那么我希望将其忽略,并将其视为常规控制器/操作路径

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

想法

  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

  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();
    }
   }