如何在 MVC Url 中设置日期 "folder"

How to have a date "folder" in an MVC Url

我想更改我正在使用的网站,这样当有人创建文章时,路径将是 "Articles/ViewArticle/2016-10-04/test" 而现在它只是 "Articles/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 存储在数据库中。

有人能帮忙吗?

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

此处提供有关属性路由的更多信息https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/

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

编辑:

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

  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
    }