如何在MVC Url中使用日期“文件夹”

时间:2016-10-04 13:49:06

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

我想更改我正在处理的网站,以便当有人创建文章时,路径将是“文章/ ViewArticle / 2016-10-04 / test”而不是现在它只是“文章/ ViewArticle / test ”。当我实现它时,我得到了一个404.

我试过在&之前创建这条路线在默认路由之后,但仍然没有去:

routes.MapRoute(
    name: "ArticlesDefault",
    url: "{controller}/{action}/{date}/{id}",
    defaults: new { controller = "Articles", action = "ViewArticle", date = UrlParameter.Optional, id = UrlParameter.Optional }
);

我应该注意,“id”实际上作为[date] / ArticleTitle存储在数据库中。

有人能帮忙吗?

1 个答案:

答案 0 :(得分:1)

改为使用属性路由。通过使用属性路由,您可以使用传递给操作方法的参数值来构造路径。

有关属性路由的更多信息,请访问https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/

如果您不想使用属性路由,可以使用constraints方法的MapRoute参数

修改

您可以尝试以下任何一种方法

  1. 不使用属性路由。我认为您的ID格式为{date}/articleTitle

    routes.MapRoute(
    name: "ArticlesDefault",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Articles", action = "ViewArticle" },
    constraints: new { id = “\\d+” });
    
  2. 使用属性路由。最好的方法是将文章日期和文章标题分成两个不同的参数。然后,您可以使用以下代码。

    [Route("Articles/ViewArticle/{articleDate:datetime}/{articleTitle}")]
    public ActionResult ViewArticle(string articleTitle, DateTime articleDate)
    {
      //your action code goes here
    }