【问题标题】:Correct mapping correct route to action with similar url使用相似的 url 正确映射正确的操作路线
【发布时间】:2014-12-07 21:18:14
【问题描述】:

我有两个必需的路径:

1: localhost:1207/Blog/2014/12/Article-Name

2:本地主机: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);
    }

}

【问题讨论】:

  • yearmonth 在这两条路线中真的是可选的吗?
  • 年月参数不应该是可选的
  • 如果我的回答对你有用。

标签: asp.net-mvc-5 asp.net-mvc-routing url-routing


【解决方案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)

【讨论】:

  • 我已经更新了我的实现,但是月列表操作没有得到解决
  • 为我工作。这些是前 2 条路线吗?它们是否按照我显示的顺序排列?
  • 你的方法是public ActionResult MonthList(int year, int month)public ActionResult Detail(int year, int month, string title)吗?
  • 一定是其他问题在起作用。我将您的控制器和我的答案中的路由复制到我的项目中,它工作正常。 /Blog/2014/12/Article-Name 点击 Detail/Blog/2014/12 点击 MonthList
  • 原来我的默认路线高于我的具体路线
猜你喜欢
  • 2012-11-23
  • 2017-07-13
  • 1970-01-01
  • 2016-07-16
  • 2012-12-22
  • 2023-04-03
  • 2014-01-05
  • 1970-01-01
  • 2013-11-22
相关资源
最近更新 更多