2010-04-24 2 views
12

У меня есть простой способ использования маршрутизации ASP.NET 4.0 с помощью Web Forms для создания маршрута, который будет действовать как своего рода подстановочный знак?asp.net 4.0 web forms routing - default/wildcard route

Мне кажется, что в WebForms вам нужно указать маршрут для каждой страницы - я ищу какой-то общий маршрут, который можно использовать там, где ничего конкретного не требуется, возможно, непосредственно сопоставляя путь от пути к пути. ..

http://somedomain.com/folder1/folder2/page возможно карта бы folder1/folder2/page.aspx

Есть предложения?

Благодаря

ответ

22

Вы можете соответствовать всем остальным маршрутам, как это:

routes.MapPageRoute("defaultRoute", "{*value}", "~/Missing.aspx"); 

В этом случае, мы знаем все маршруты, и хотим отправить что-нибудь еще на «недостающий»/404 стр. Просто не забудьте поставить это как последний маршрут, так как это подстановочный знак и все поймает.

В качестве альтернативы вы можете зарегистрировать маршрут, точно так же, но внутренне делает отображение на страницу, например:

routes.Add(new Route("{*value}", new DefaultRouteHandler())); 

Этого класс обработчик будет делать свое подстановочное отображение, что-то вроде этого:

public class DefaultRouteHandler : IRouteHandler 
{ 
    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
    //Url mapping however you want here: 
    var pageUrl = requestContext.RouteData.Route.Url + ".aspx"; 

    var page = BuildManager.CreateInstanceFromVirtualPath(pageUrl, typeof(Page)) 
       as IHttpHandler; 
    if (page != null) 
    { 
     //Set the <form>'s postback url to the route 
     var webForm = page as Page; 
     if (webForm != null) 
     webForm.Load += delegate { webForm.Form.Action = 
            requestContext.HttpContext.Request.RawUrl; }; 
    } 
    return page; 
    } 
} 

Это немного сломано в нечетных местах, чтобы предотвратить горизонтальную прокрутку, но вы получаете общую точку. Опять же, убедитесь, что это последний маршрут, иначе он будет обрабатывать все ваши маршруты.

+0

Возможно ли тогда сделать что-то вроде: Тусклый взгляд Как String = Page.RouteData.Values ​​("* value") Я знаю, что это не шаблон, но как насчет шаблона? – davemackey

+1

Я получаю следующую ошибку. Что мне не хватает? (.Net 4.5) System.Web.Routing.RouteBase 'не содержит определения для' Url ', а метод расширения' Url ', принимающий первый аргумент типа' System.Web.Routing.RouteBase ', может быть найден (у вас отсутствует директива по использованию или ссылка на сборку?) – HGMamaci

0

Дополнительно - Имейте в виду, что вам нужно добавить исключение для .axd файлов в файле Global.asax, если есть элементы управления проверки в вашем веб-приложение:

http://basgun.wordpress.com/2010/10/25/getting-syntax-error-in-asp-net-routing-due-to-webresource-axd/

В противном случае, вы будете продолжайте получать синтаксическую ошибку, потому что маршрутизация собирает файлы .axd и неправильно загружает файлы JavaScript, необходимые для элементов проверки.

+0

Ссылка закрыта, или блог является закрытым. – GoldBishop

 Смежные вопросы

  • Нет связанных вопросов^_^