Вы можете соответствовать всем остальным маршрутам, как это:
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;
}
}
Это немного сломано в нечетных местах, чтобы предотвратить горизонтальную прокрутку, но вы получаете общую точку. Опять же, убедитесь, что это последний маршрут, иначе он будет обрабатывать все ваши маршруты.
Возможно ли тогда сделать что-то вроде: Тусклый взгляд Как String = Page.RouteData.Values ("* value") Я знаю, что это не шаблон, но как насчет шаблона? – davemackey
Я получаю следующую ошибку. Что мне не хватает? (.Net 4.5) System.Web.Routing.RouteBase 'не содержит определения для' Url ', а метод расширения' Url ', принимающий первый аргумент типа' System.Web.Routing.RouteBase ', может быть найден (у вас отсутствует директива по использованию или ссылка на сборку?) – HGMamaci