2009-07-29 46 views
2

我想尾隨斜線添加到任意的URL匹配的有效途徑,但目前並不在一個斜線結束的是,即www.example.com/url301重定向後的路線是匹配的,但控制器執行之前

一個url匹配到一個有效的路線後,我想301重定向到相同的網址,但添加尾部斜槓即www.example.com/url/

我花了一些時間看着它,但我似乎無法弄清楚。

我相信路徑匹配PostResolveRequestCache事件,但我不知道如何訪問該事件期間或之後的路由數據,以查看是否匹配有效的路由。如果我可以確認一個有效的路線是匹配的,那麼我可以檢查網址以確保它以斜線結尾。

我希望這很清楚,讓我知道如果你需要更多的信息。

回答

0

我假設你正試圖消除重複內容的搜索引擎優化目的。

Scott Hanselman說你可以用IIS7 Rewrite模塊來做這件事(你在運行IIS7嗎?)他在http://www.hanselman.com/blog/ASPNETMVCAndTheNewIIS7RewriteModule.aspx的帖子描述了這個過程。

+0

是的,我想確保我沒有到多個內容相同的路徑。 現在我正在運行IIS6,但我有一個重寫模塊安裝,所以我可以使用這種方法,我想。這將重寫所有傳入的請求,但我只想重寫有效的路由並保留無效的url。 我實際上最終在我的基礎控制器上使用了一個動作過濾器來重寫任何不以斜槓結尾的URL。到目前爲止,這工作得很好。 看到這個URL我用什麼... http://www.devproconnections.com/tabId/180/itemId/4576/Putting-the-IIS-SEO-Toolkit-to-work-with-ASPNET- M.aspx – Paul 2009-07-31 14:34:52

-1

這聽起來像是一個完美的結合了動作過濾器:

public class EnforceTrailingSlashAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (!filterContext.HttpContext.Request.Path.EndsWith("/")) 
     { 
     filterContext.Result = new RedirectResult(
      filterContext.HttpContext.Request.Path + "/");    
     } 
    } 
}