.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),那么我希望它使用典型的路径(区域/ controller / action /(queryParamters),但是还在我的控制器上使用LeagueName作为路由参数吗?我不介意看起来像"domainname.com/FantasyDraftBoard/NHL/Controller/Action/"
的路由URL。是“索引”操作的“索引”
例如:
[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 与这四个字符串之一不匹配,那么我希望将其忽略并将其视为常规控制器/操作路线。
注意-在顶部忽略我的路线中的约束,这只是为了测试和尝试。
有想法吗?
答案 0 :(得分: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