Я хочу сервер динамических страниц, используя URL без контроллера и действий на основе заголовка страницы
URL по умолчанию: domain.com/pages/details/1
Я хочу, чтобы это был сервер как
domain.com/title-of-dynamic-page-in-db-space-replaced-with-dash
domain.com/about-us
domain.com/contact-us
если я делаю это без тире, тогда маршрутизация будет путать с controller
name
вот почему я добавил тире -
для динамических страниц
мое действие выглядит так
// GET: Pages/View/5
public ActionResult View(string id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Page page = db.Pages.First(p => p.name_english == id.Replace("-"," "));
if (page == null)
{
return HttpNotFound();
}
}
мои маршруты
routes.MapRoute(
name: "aaaaa",
url: "{id}",
defaults: new { controller = "pages", action = "view" },
constraints: new { id = @"^[A-Za-z\d-]+$" } //*********help needed in this line ******************************
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
выше ограничения ^[A-Za-z\d-]+$
принимает alpha(optional)
numeric(optional)
и dash(optional)
пока мне нужно alpha(optional)
numeric(optional)
и dash(*mandatory*)
таким образом механизм маршрутизации не будет путать заголовок страницы с контроллером / действием, так как я буду следить за тем, чтобы мое имя динамической страницы содержало пробел (я заменяю его тире)
и мой контроллер / действие не будет именоваться содержащимся тире
также скажите мне, подходит ли этот подход или нет, есть ли другое оптимизированное решение для этого?