我想创建一个路由,将匹配特定模式的所有请求重定向到使用部分模式构建的位置。我想抓取 URL 中的一些片段,并将其余部分视为 Web 窗体应用程序中 aspx 页面的路径。例如
RouteTable.Routes.MapPageRoute("SomeRouteName", "{something}/{*path}", "~/pages/{*path}/Default.aspx");
其中 *path 可能是包含“\”的内容。查询字符串应保留为查询字符串。
是否可以创建这样的路线?
我想创建一个路由,将匹配特定模式的所有请求重定向到使用部分模式构建的位置。我想抓取 URL 中的一些片段,并将其余部分视为 Web 窗体应用程序中 aspx 页面的路径。例如
RouteTable.Routes.MapPageRoute("SomeRouteName", "{something}/{*path}", "~/pages/{*path}/Default.aspx");
其中 *path 可能是包含“\”的内容。查询字符串应保留为查询字符串。
是否可以创建这样的路线?
我不知道有什么办法可以那样做。
更标准的方法是将目标设置为“~/pages/default.aspx”,然后让该页面检查{path}
参数并显示相应的数据。
如果您真的希望它在另一条路径中,则不要使用{}
占位符。只需硬编码路径的该部分(源和目标)。
在查看了几种方法之后,我最终创建了自己的路由处理程序,如下所示:
public class SomethingRoutingHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
string something = (string)requestContext.RouteData.Values["something"];
string path = (string)requestContext.RouteData.Values["path"];
string virtualPath = "~/" + path + "Default.aspx";
return BuildManager.CreateInstanceFromVirtualPath(virtualPath, typeof(Page)) as Page;
}
}
然后我使用页面中的 RouteData 来访问某些内容。我发现这些文章很有帮助:
http://msdn.microsoft.com/en-us/magazine/dd347546.aspx
http://www.xdevsoftware.com/blog/post/Default-Route-in-ASPNET-4-URL-Routing.aspx