2010-05-08 113 views
0

的百度蜘蛛似乎增加¤結束的一些抓取的網址(它似乎包含單個Unicode字符作爲最後一個字符的URL發生)ASP.NET MVC - 如何修改請求的URL?

的百度,請求的URL看起來是這樣的:

site.com/abc/ä¤

site.com/abc/ä是有效的URL,並從我的網站上很多地方的聯繫。

內部的問題是不同的路線是對這類URL的匹配併發生未處理的異常。

我不喜歡失敗,因爲在網站上太多的500錯誤的百度。

我謹請求的任何ASP.NET MVC處理開始之前刪除添加的字符所請求的URL更改爲不同的URL。

我可以在ASP.NET MVC中編寫請求過濾器/ http模塊或類似的東西來從URL刪除尾隨的'¤'嗎?我不想改變我的路線來反擊這種行爲。

回答

1

我喜歡回答「在線路修復它」,但這裏的一個替代(抱歉,這是在VB)

Public Class BaseController : Inherits System.Web.Mvc.Controller 
    Protected Overrides Function CreateActionInvoker() As System.Web.Mvc.IActionInvoker 
      If HttpContext.Request.RawUrl.EndsWith("¤") Then 
       Dim redir As String = Replace(HttpContext.Request.RawUrl, "¤", "") 
       Response.Redirect(redir) 
      End If 
    End Sub 
End Class 

然後繼承所有的控制器從BaseController

注:爲與string.replace不是「最好」的方式,如果尾隨字符是一個正常的網址有效,你要修剪其關閉一些其他的方式。

+0

謝謝,這正是我一直在尋找 – Marek 2010-07-04 10:54:09

1

林不知道,但也許將像一個路線「{控制器}/{行動}/{ID}¤」,與上月底的卡拉科特有

這條路應該來你是一個前目前使用

+0

正如我在我的問題已經指出,我想找到一種方法如何解決這一問題,而無需修改我的路線 – Marek 2010-05-08 09:42:39

+1

好,過濾器路由後應用,所以要做到這一點的最好的地方是在路線。過濾這之前,控制器會更糟 – ariel 2010-05-08 10:26:50