2010-05-08 77 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