如何在 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
参数
编辑:
您可以尝试以下任何一种方法
不使用属性路由。我假设你的 Id 是 {date}/articleTitle
的形式
routes.MapRoute(
name: "ArticlesDefault",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Articles", action = "ViewArticle" },
constraints: new { id = “\d+” });
使用属性路由。最好的方法是将文章日期和文章标题分成两个不同的参数。然后你可以使用下面的代码。
[Route("Articles/ViewArticle/{articleDate:datetime}/{articleTitle}")]
public ActionResult ViewArticle(string articleTitle, DateTime articleDate)
{
//your action code goes here
}
我想更改我正在使用的网站,这样当有人创建文章时,路径将是 "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
参数
编辑:
您可以尝试以下任何一种方法
不使用属性路由。我假设你的 Id 是
的形式{date}/articleTitle
routes.MapRoute( name: "ArticlesDefault", url: "{controller}/{action}/{id}", defaults: new { controller = "Articles", action = "ViewArticle" }, constraints: new { id = “\d+” });
使用属性路由。最好的方法是将文章日期和文章标题分成两个不同的参数。然后你可以使用下面的代码。
[Route("Articles/ViewArticle/{articleDate:datetime}/{articleTitle}")] public ActionResult ViewArticle(string articleTitle, DateTime articleDate) { //your action code goes here }