2012-06-14 205 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