маршрутизация веб-форм asp.net 4.0 - маршрут по умолчанию / подстановочный знак - PullRequest
12 голосов
/ 24 апреля 2010

У меня есть простой способ использования маршрутизации ASP.NET 4.0 с веб-формами для создания маршрута, который будет действовать как своего рода подстановочный знак?

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

http://somedomain.com/folder1/folder2/page возможно будет сопоставлен с folder1 / folder2 / page.aspx

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

Спасибо

Ответы [ 2 ]

24 голосов
/ 24 апреля 2010

Вы можете сопоставить все оставшиеся маршруты, как это:

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

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

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

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 голосов
/ 09 декабря 2010

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

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

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

...