为什么尾随的%20(在这种情况下是有效数据)会杀死asp.net mvc路由

And*_*iih 17 .net c# asp.net-mvc routing asp.net-mvc-2

采取以下控制器操作

    public ActionResult NextBySURNAME(int id, string data)
    {
        //code to process the data and edit the id accoringly not written yet
        return RedirectToAction("Edit", new { id = id });
    }
Run Code Online (Sandbox Code Playgroud)

如果我用/ Mycontroller/NextBySURNAME/12/Smith%20Simon调用它

然后它工作正常(在这种情况下编辑记录12)但是

/ myController的/ NextBySURNAME/12 /史密斯%20

给了我一个404

现在我知道在某些情况下我的问题域尾随空白是很重要的,所以我不只是想修剪它.那为什么这会破坏我的路线呢?

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}/{data}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional, data=UrlParameter.Optional } // Parameter defaults
        );
Run Code Online (Sandbox Code Playgroud)

BC.*_*BC. 8

所以我做了一些路由调试,发现以空格结尾的路由甚至没有被我的MVC应用程序评估.因此,IIS必须很差地处理这些请求.

我在IIS 7.5中添加了一个重写规则来匹配尾随空格,并将它们重写为没有空格的相同URL.我对此解决方案不满意,但无法找到解释为什么IIS错误处理带有尾随空格的URL的原因.