asp.net MVC ограничения маршрута регулярное выражение - PullRequest
0 голосов
/ 05 сентября 2018

Я хочу сервер динамических страниц, используя 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*)

таким образом механизм маршрутизации не будет путать заголовок страницы с контроллером / действием, так как я буду следить за тем, чтобы мое имя динамической страницы содержало пробел (я заменяю его тире)
и мой контроллер / действие не будет именоваться содержащимся тире

также скажите мне, подходит ли этот подход или нет, есть ли другое оптимизированное решение для этого?

1 Ответ

0 голосов
/ 12 сентября 2018

Я надеюсь, что следующий фрагмент будет работать для вас.

    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]*[-]*)+$
    //---------------------------------------
...