2016-10-04 51 views
0

我想更改我正在处理的网站,以便在有人创建文章时,路径为“Articles/ViewArticle/2016-10-04/test “相反,现在它只是”文章/视图文章/测试“。当我实现它,我得到了一个瞬间404如何在MVC中创建日期“文件夹”Url

我尝试创建&之前该路由的默认路由后,却仍然没有去:

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

我要指出的是,“ID”实际上存储在数据库中作为[日期]/ArticleTitle。

任何人都可以提供帮助吗?

+0

你有没有在您的视图中添加的参数。 '公众的ActionResult ViewArticle(字符串ID,字符串日期)'? –

回答

1

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

的属性路由

更多信息,这里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 
    } 
    
+0

我试图通过打开属性路由来实现这一点。首先,我有[Route(“ViewArticle/{id})],但没有用(因为id是,例如2016-10-01/the-article-title)。尝试了一些更复杂的事情,如: [Route(“ViewArticle/{regex(\\ d {4} - \\ d {2} - \\ d {2} \\/[a-zA-Z - ] + $}”)]和MVC在我说我不能有{或}。任何想法? – ajtatum

+0

也试过这个,但得到了404: routes.MapRoute( “ArticlesDefault”, “ViewArticle/{id}”, new {controller =“Articles” ,action =“ViewArticle”}, new {id = @“^ \ d {4} - \ d {2} - \ d {2} \/[a-zA-Z - ] + $”}, new [] {“oandp_redesign_web.Controllers”} ); – ajtatum

+0

@ajtatum添加代码示例。让我知道它是否有帮助 – Gurdev