ниже код ловит почти все.
http://www.mysite.com/
, например, все равно будет перенаправлен на default.aspx, я думаю. Но что-то вроде
http://www.mysite.com/some/page/that/doesnt/exist
будет пойман TestRouteHandler. Спецификатор маршрута {* fields} должен заканчиваться в объекте RequestContext.RouteData, переданном маршрутизатору, чтобы вы могли делать все, что хотите. Однако в этот момент вы в основном используете механизм перезаписи.
public class Routes
{
public static void Register(RouteCollection routes)
{
// setup legacy url routing
routes.Add(new Route("{*fields}",new TestRouteHandler()));
}
}
public class TestRouteHandler : IRouteHandler
{
public virtual IHttpHandler GetHttpHandler(RequestContext requestContext)
{
Page page = BuildManager.CreateInstanceFromVirtualPath("/default.aspx", typeof(Page)) as Page;
return page;
}
}
в качестве альтернативы, вы можете указать маршрут верхнего уровня, как
routes.Add(new Route("dave/{*fields}",new TestRouteHandler()));
, который будет ловить предметы, как.
http://www.mysite.com/dave
http://www.mysite.com/dave/test/parameter
http://www.mysite.com/dave/virtually/infinite/number/of/items/goes/here
Я делал это, но он не работал, теперь это: s wierd. должно быть, был одним из этих пятничных моментов! Спасибо за разъяснение –