当我使用ASP.NET 4.0路由与Web窗体来生成一个可以作为某种通配符的路由时,我有一个简单的方法?
在我看来,在WebForms中,您必须为每个页面指定一个路由 – 我正在寻找某种通用路由,可以在没有特定要求的地方使用,可能直接从路径映射到路径,所以…
http://somedomain.com/folder1/folder2/page可能会映射到folder1 / folder2 / page.aspx
有什么建议么?
谢谢
解决方法
您可以匹配所有剩余的路线,如下所示:
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; } }
这是有点奇怪的地方,以防止水平滚动,但你得到的总体来说.再次,确保这是最后一条路线,否则它将处理所有的路线.