Вопрос о маршрутизации ASP.NET 4

Я пытаюсь сделать в своем файле Global.asax следующее:

На данный момент я должен определить свой маршрут следующим образом:

routes.MapPageRoute(
    "ViewPage", 
    "pages/{slug}",
    "~/viewpage.aspx",
    false
);

Обратите внимание на слова pages перед {slug}

Теперь, если я определю это так:

routes.MapPageRoute (
    "ViewPage", 
    "{slug}",
    "~/viewpage.aspx",
    false
);

Это не работает.

Мои файлы CSS и JS не загружаются, я получаю ошибку 404.

Но если я сделаю это:

routes.MapPageRoute (
    "ContactPage", 
    "contact",
    "~/contact.aspx",
    false
);

Работает нормально ??

В основном я хочу, чтобы мои URL-адреса выглядели так:

example.com/contact или example.com/about-us, и все это обслуживается динамически из базы данных на основе {slug}.

Кто-нибудь может помочь?


person xqwzid    schedule 27.01.2011    source источник


Ответы (3)


С использованием:

RouteTable.Routes.MapPageRoute("slug", 
                "{slug}",
                "~/page.aspx", false);

У меня отлично работает. Вам нужно убедиться, что ваши маршруты находятся в правильном порядке; специфичен для общего, но также имеет игнорируемый для ресурсов и т. д., иначе они тоже будут перенаправлены туда.

надеюсь, это поможет

Изменить

Игнорировать такие маршруты, как:

RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}");
person WestDiscGolf    schedule 27.01.2011
comment
+1 - Решение похоже на stevefenton.co.uk/Content/Blog/Date/201101/Blog/ - person Fenton; 27.01.2011


Спасибо, парни!!

Мне пришлось изменить порядок маршрутов.

Я использую HttpHandler для объединения и сжатия файлов js и css. Это добавлялось последним так:

const string combine = "~/code/httphandlers/httpcombiner.ashx";
RegisterRoutes(RouteTable.Routes);
RouteTable.Routes.Add(new Route("combine", new HttpHandlerRoute(combine)));

Я переключил их на:

const string combine = "~/code/httphandlers/httpcombiner.ashx";
RouteTable.Routes.Add(new Route("combine", new HttpHandlerRoute(combine)));
RegisterRoutes(RouteTable.Routes);

Я добавил StopRoutingHandler для webresource.axd, и теперь все работает прекрасно!

person xqwzid    schedule 27.01.2011