Я создал маршрут в приложении 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.Если у меня есть идентификатор статьи, то в базе данных будут указаны дата и имя статьи.
Я действительно хочу знать, как должен выглядеть метод контроллера.Должен ли я передать все значения методу или использовать 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();
}
Я думаю, что оба технически работают, нокакой путь лучше?
Также: если есть какие-то другие недостатки в том, что я делаю, не стесняйтесь указывать на них.