【发布时间】:2010-11-15 20:48:22
【问题描述】:
我在 ASP.net MVC 应用程序中创建了一个如下所示的路由:
routes.MapRoute(
"ArticleRoute",
"{year}/{month}/{day}/{articleId}/{displayName}",
new { controller = "Article", action = "Details" }
);
我想要一条类似于博客文章的路线。
示例:http://www.foobar.com/2010/01/01/123456789/the-name-of-the-article
在我的详细信息控制器操作中,如果年、月、日和显示名称不正确,我想做一个永久重定向。我想知道编写 Details() 控制器方法的最佳方法。
唯一真正需要的字段是 articleId。如果我有文章 ID,那么数据库就会有文章的日期和名称。
我真的很想知道控制器方法应该是什么样子。我是将所有值传递给方法还是使用 RouteData 来获取它们?
public ActionResult Details(int articleId, string displayName)
{
var article = */SNIP*/;
int articleYear = RouteData.Values["year"];
// etc.
DateTime articleDate = new DateTime(articleYear, articleMonth, articleDay);
string realDisplayName = article.Name.ToSeoString();
if( displayName != realDisplayName || article.Date != articleDate)
// permanent redirect to the actual article
return View();
}
或
public ActionResult(int year, int month, int day, int articleId, string displayName)
{
var article = /*SNIP*/;
DateTime articleDate = new DateTime(year, month, day);
string realDisplayName = article.Name.ToSeoString();
if( displayName != realDisplayName || article.Date != articleDate )
// permanent redirect to the actual article
return View();
}
我认为这两种方法在技术上都有效,但哪种方法更好?
另外:如果我在做的事情中有任何其他缺陷,请随时指出。
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-routing