我有两条必修路径:
1:localhost:1207 / Blog / 2014/12 / Article-Name
2:localhost:1207 / Blog / 2014/12
现在我为每条路线编写了自定义映射
1:
routes.MapRoute(
name: "BlogArticle",
url: "blog/{year}/{month}/{title}",
defaults: new
{
controller = "Blog",
action = "Detail",
year = UrlParameter.Optional,
month = UrlParameter.Optional,
title = UrlParameter.Optional
}
);
2:
routes.MapRoute(
name: "BlogMonthList",
url: "blog/{year}/{month}",
defaults: new
{
controller = "Blog",
action = "MonthList",
year = UrlParameter.Optional,
month = UrlParameter.Optional
});
第二个不起作用,我不确定为什么。 作为答案的一部分,你能解释一下原因吗?
我的解决方案必须使用RouteConfig.cs
我的控制器示例:
public BlogController : Controller{
public ActionResult MonthList(int year, int month)
{
var model = new MonthArticlesModel()
{
Year = year,
Month = month
};
return View(model);
}
public ActionResult Detail(int year, int month, string title)
{
var model = new DetailModel();
return View(model);
}
}
答案 0 :(得分:1)
问题在于无法区分路线,因为您已将所有参数设为可选,且/Blog/2014/12/Article-Name
和/Blog/2014/12
都与第一条路线匹配。
我建议您遵循更多传统路线,但是您可以通过将路线指定为
来完成此工作routes.MapRoute(
name: "BlogMonthList",
url: "blog/{year}/{month}",
defaults: new { controller = "Blog", action = "MonthList" }
);
routes.MapRoute(
name: "BlogArticle",
url: "blog/{year}/{month}/{title}",
defaults: new { controller = "Blog", action = "Detail" }
);
然后/Blog/2014/12/Article-Name
会跳过第一条路线(只接受2个参数)并重定向到Detail(int year, int month, string title)
,但/Blog/2014/12
会匹配第一条路线并重定向到MonthList(int year, int month)