ASP.NET MVC - 如何修改请求的URL?

时间:2010-05-08 08:51:30

标签: asp.net-mvc url routing filtering

百度蜘蛛似乎将¤添加到某些已抓取的网址的末尾(似乎它与包含单个unicode字符作为最后一个字符的网址一起发生)

百度请求的网址如下所示:

site.com/abc/ä¤

,而

site.com/abc/ä是有效的网址,并且是从我网站上的许多地方链接的。

内部问题是这种网址匹配了不同的路由,并且发生了未处理的异常。

由于网站上有500多个错误,我不想失去baidu。

我想通过在任何ASP.NET MVC处理请求开始之前删除添加的字符,将请求的URL更改为其他URL。

我可以在ASP.NET MVC中编写请求过滤器/ http模块或类似内容来从网址中删除尾随的“¤”吗?我不想改变我的路由到反黑客这种行为。

2 个答案:

答案 0 :(得分:1)

我不确定,但可能会添加一个类似“{controller} / {action} / {id}¤”的路线,最后有一个caracter

此路线应位于您当前正在使用的路线

之前

答案 1 :(得分: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不是“最佳”方式,您可能希望以其他方式修剪它。