ASP.NET MVC路由:同一控制器上的不同操作

3

我有一个名为Raportare的控制器,它有两个动作:ReportAReportB。两个动作都基于提供的参数返回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,则正常工作。可能我在路由规则上做错了什么,但我无法弄清楚。
2个回答

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操作,因为它已在URL中指定。 mysite.com/Raportare将调用ReportA,因为它是默认操作。

0
你创建的路由基本上是相同的。这就是为什么第一个与请求字符串匹配的路由会成功并调用第一个操作的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接