.net
  • asp.net
  • url
  • .net-4.0
  • routing
  • 2010-11-11 93 views 2 likes 
    2

    這是一個近乎相同的問題,我對這個查詢是一樣的,雖然我的是一個Web窗體場景(使用.NET 4中的路由),而不是MVC。如何獲得附加到頁面路線的尾部斜線?

    Add a trailing slash at the end of each url?

    有人提到有一半不幸的是提供爲紐帶的完整解決方案的解決方案是壞了。

    目前,當我得到路由URL時,我的頁面路由中的任何結尾斜槓都將被刪除。

    <a runat="server" href='<%$RouteUrl:RouteName=Posts %>'> 
    

    在這裏再次尾隨斜線被刪除,儘管它存在於我的路由表: 當我要使用下列類型的內嵌語法的我的網頁形式,這是特別有問題的。

    任何人都可以請幫忙提供一個清潔,有效的解決這個問題?理想情況下,就像我上面提到的另一個Stack Overflow線程中提供的'接近完成'的解決方案一樣?

    回答

    3

    我現在已經找到了解決我原來的問題。我發現了下面的文章,它描述瞭如何確保所有Url都是小寫的,所以我只是使用了這個示例代碼,但在它執行ToLowerInvariant()的地方附加了一個尾部的斜線。

    所以,我的2個輔助類現在看起來是這樣的:

    public class LowercaseRoute : System.Web.Routing.Route 
    { 
        public LowercaseRoute(string url, IRouteHandler routeHandler) 
         : base(url, routeHandler) { } 
        public LowercaseRoute(string url, RouteValueDictionary defaults, IRouteHandler routeHandler) 
         : base(url, defaults, routeHandler) { } 
        public LowercaseRoute(string url, RouteValueDictionary defaults, RouteValueDictionary constraints, IRouteHandler routeHandler) 
         : base(url, defaults, constraints, routeHandler) { } 
        public LowercaseRoute(string url, RouteValueDictionary defaults, RouteValueDictionary constraints, RouteValueDictionary dataTokens, IRouteHandler routeHandler) 
         : base(url, defaults, constraints, dataTokens, routeHandler) { } 
    
        public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) 
        { 
         VirtualPathData path = base.GetVirtualPath(requestContext, values); 
    
         if (path != null) 
          path.VirtualPath = path.VirtualPath.ToLowerInvariant() + "/"; 
    
         return path; 
        } 
    } 
    
    public static class RouteCollectionExtensions 
    { 
        public static void MapRouteLowercase(this RouteCollection routes, string name, string url, object defaults) 
        { 
         routes.MapRouteLowercase(name, url, defaults, null); 
        } 
    
        public static void MapRouteLowercase(this RouteCollection routes, string name, string url, object defaults, object constraints) 
        { 
         if (routes == null) 
          throw new ArgumentNullException("routes"); 
    
         if (url == null) 
          throw new ArgumentNullException("url"); 
    
         var route = new LowercaseRoute(url, new MvcRouteHandler()) 
         { 
          Defaults = new RouteValueDictionary(defaults), 
          Constraints = new RouteValueDictionary(constraints) 
         }; 
    
         if (String.IsNullOrEmpty(name)) 
          routes.Add(route); 
         else 
          routes.Add(name, route); 
        } 
    } 
    

    在我的Global.asax的,而不是我的RegisterRoutes內使用「圖路線」套路,我打電話給我的新MapRouteLowercase方法,而不是(傳入相同的參數),例如

    routes.MapRouteLowercase("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 
    

    ,我得到了可以在這裏找到這段代碼的原創文章:

    http://goneale.com/2008/12/19/lowercase-route-urls-in-aspnet-mvc/

    +0

    在發佈問題和答案之間,您是否偶然從asp.net切換到mvc? routes.MapRouteLowercase(...)顯然適用於mvc控制器/操作。 – secretwep 2016-04-12 20:53:44

    0

    使生成的URL始終小寫,並用最後結尾的斜線我的TidyRouting庫添加到我的解決方案,那麼我只需用新的「MapTidyRoute」替換「MapRoute」方法即可。

    相關問題