我有一个名为Raportare
的控制器,它有两个操作:ReportA
和ReportB
。
两者都根据提供的参数返回一个excel文件。
public ActionResult ReportA(int? month, int? year)
{
...
}
public ActionResult ReportB(int? month, int? year)
{
...
}
我的global.asax具有以下路由规则:
routes.MapRoute(
"ReportA",
"{Raportare}/{ReportA}/{month}/{year}",
new { controller = "Raportare", action = "ReportA", month = UrlParameter.Optional, year = UrlParameter.Optional});
routes.MapRoute(
"ReportB",
"{Raportare}/{ReportB}/{month}/{year}",
new { controller = "Raportare", action = "ReportB", month = UrlParameter.Optional, year = UrlParameter.Optional });
然而,当我去mysite.com/Raportare/ReportB/5/2012时,它将返回ReportA文件。 如果我去mysite.com/Raportare/ReportB?month=5&year=2012,它可以正常工作。 可能我在路由规则中做错了但我无法理解。
答案 0 :(得分:3)
您不需要为每个操作添加路线 - 它们像模板一样工作,第三个参数只是默认值。
routes.MapRoute(
"reports",
"Raportare/{action}/{month}/{year}",
new {
controller = "Raportare",
action = "ReportA",
month = UrlParameter.Optional,
year = UrlParameter.Optional
}
);
将此值放在Global.asax.cs中的默认规则之前,否则默认值可能先匹配。
然后mysite.com/Raportare/ReportB/5/2012
将调用ReportB
操作,因为它已在网址中指定。
mysite.com/Raportare
将调用ReportA
,因为它是默认操作。
答案 1 :(得分:0)
您创建的路线基本相同。这就是为什么匹配请求字符串的第一个成功并调用第一个操作。