asp.net MVC ограничения маршрута регулярное выражение
Я хочу сервер динамических страниц, используя 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
название
вот почему я добавил тире -
для динамических страниц
мое действие выглядит так
// 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*)
таким образом механизм маршрутизации не будет путать заголовок страницы с контроллером / действием, так как я буду следить за тем, чтобы мое имя динамической страницы содержало пробел (я заменяю его тире)
и мой контроллер / действие не будет именоваться содержащим тире
также скажите мне, подходит ли этот подход или нет, есть ли другое оптимизированное решение для этого?
1 ответ
Я надеюсь, что следующий фрагмент будет работать для вас.
routes.MapRoute(
name: "aaaaa",
url: "{id}",
defaults: new { controller = "pages", action = "view" },
constraints: new { id = @"^([-]*[a-zA-Z0-9]*-[a-zA-Z0-9]*[-]*)+$" } //*********this should work**
);
//---------------------------------------
// ^([-]*[a-zA-Z0-9]*-[a-zA-Z0-9]*[-]*)+$
//---------------------------------------