【问题标题】:asp.net mvc routing different actions on the same controllerasp.net mvc 在同一个控制器上路由不同的操作
【发布时间】:2012-05-29 18:45:55
【问题描述】:

我有一个名为 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,它工作正常。 可能我在路由规则中做错了,但我无法弄清楚。

【问题讨论】:

    标签: c# asp.net-mvc routing


    【解决方案1】:

    您不需要为每个操作添加路由 - 它们就像模板一样工作,第三个参数只是默认值。

    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,因为它是默认操作。

    【讨论】:

      【解决方案2】:

      您创建的路线基本相同。这就是第一个匹配请求字符串成功并调用第一个操作的原因。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-14
        • 1970-01-01
        • 1970-01-01
        • 2013-06-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多