Маршрутизация веб-форм asp.net 4.0 - маршрут по умолчанию / подстановочный знак
У меня есть простой способ при использовании маршрутизации ASP.NET 4.0 с веб-формами для создания маршрута, который будет действовать как своего рода подстановочный знак?
Мне кажется, что в Web Forms вы должны указать маршрут для каждой страницы - я ищу какой-то общий маршрут, который можно использовать там, где ничего особенного не требуется, возможно, отображение непосредственно от пути к пути, так что...
http://somedomain.com/folder1/folder2/page, возможно, будет сопоставлен с folder1/folder2/page.aspx
Какие-либо предложения?
Спасибо
2 ответа
Вы можете сопоставить все оставшиеся маршруты, как это:
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;
}
}
Это немного ломается в нечетных местах, чтобы предотвратить горизонтальную прокрутку, но вы получаете общую точку. Опять же, убедитесь, что это последний маршрут, иначе он будет обрабатывать все ваши маршруты.
Кроме того, имейте в виду, что вам нужно добавить исключение для файлов.axd в файл Global.asax, если в вашем веб-приложении есть элементы проверки:
В противном случае вы продолжите получать синтаксическую ошибку, поскольку при маршрутизации выбираются файлы.axd и неправильно загружаются файлы JavaScript, необходимые для элементов управления проверки.