为什么跟踪%20(在这种情况下是有效数据)会终止asp.net mvc路由?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (7)

采取以下控制器操作

    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 });
    }

如果我用/ 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
        );
提问于
用户回答回答于

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

我向IIS 7.5添加了重写规则以匹配尾随空格,并将它们重写为没有空格的相同URL。我对这个解决方案并不满意,但一直没能找到解释为什么IIS错误地处理了带有空格的URL。

扫码关注云+社区