Ответ 1
Вы можете сопоставить все оставшиеся маршруты следующим образом:
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> 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;
}
}
Это немного побито в нечетных местах, чтобы предотвратить горизонтальную прокрутку, но вы получаете общую точку. Опять же, убедитесь, что это маршрут last, иначе он будет обрабатывать все ваши маршруты.