2012-06-14 160 views
1

我已经在global.asax中设置了路由,它可以正常工作到单个路由目的地。像home.aspxASP WebForms路由

但是我其实想做的是航线正常

mysite.com/token/home.aspx?demo=yes

规定的路线后,所有页面点击一个链接到联系?目标=主我们去

mysite.com/token/contact.aspx?target=main

因为我总是会想使用{}令牌上的所有页面,但我想要的网站如常运作

目前,我点击一个链接,如联系人和URL填充为mysite.com/token/contact.aspx?target=main在URL栏中,但服务器说无法找到资源;我假设在服务器级别到/home.aspx/contact.aspx?target=main

的路由是否有一个通配符或设置为正常路由任何其他..或所有页面到实际请求的页面,而不是一个静态路由 - 但仍然能够访问该令牌作为路由变量而不是查询中的参数?

为了澄清这是.NET4 ASP Web表单不MVC

回答

1

您可以定义一个通配符路线,并使用BuildManager返回正确的文件。

例子:

public class TokenRoute : Route 
{ 
    class TokenRouteHandler : IRouteHandler 
    { 
     #region IRouteHandler Members 

     public IHttpHandler GetHttpHandler(RequestContext requestContext) 
     { 
      var path = Convert.ToString(requestContext.RouteData.Values["path"]); 
      if (string.IsNullOrEmpty(path)) 
      { 
       path = "Default.aspx"; 
      } 

      var vPath = "~/" + path; 

      HttpContext.Current.Items[RoutingUtil.UrlRoutingVirtualPathKey] = vPath; 

      return (IHttpHandler)BuildManager.CreateInstanceFromVirtualPath(vPath, typeof(IHttpHandler)); 
     } 

     #endregion 
    } 

    public TokenRoute(string token) 
      : base(token + "/{*path}", null, new RouteValueDictionary(), new TokenRouteHandler()) 
    { 
     DataTokens = new RouteValueDictionary { { "token", token } }; 
    } 
} 

,希望能有所帮助!

+0

感谢您的回答。我会测试这个。我很久以前就用另一种解决方案解决了这个问题,但很好知道。谢谢! – ppumkin