我遇到了以下问题。也许有人发现了这种奇怪的行为。
我在global.asax.cs中有以下路由定义:
routes.Add(new Route("/module/{searchTerm}", new RouteValueDictionary { {"controller", "Module"}, {"action", "Index"} }, null, new MvcRouteHandler()));
因此,从第一个角度来看,没有什么特别之处,但当搜索字词中的空格显示为+
符号时会出现问题。
例如,我们尝试打开一个链接:
http://[myserver]/module/some%20search%20term
在这种情况下,一切正常,它会将我们重定向到正确的操作,但如果链接如下:
http://[myserver]/module/some+search+term
我收到错误声明没有与提供的网址匹配的路线。
顺便说一句,我无法在ASP.NET开发服务器上重现此问题。它只出现在IIS上。可能有人确实有这样的问题吗?
答案 0 :(得分:1)
要明确:+只是查询组件中的特殊字符。
RFC 1738(由2396和3986修改)定义了方案(http :),权限(//server.example.com)和路径(/myfile/mypage.htm)组件,而不是为+字符定义任何特殊含义。
答案 1 :(得分:0)
+
符号是段的分隔符。细分是方案,权限,路径和查询。
来自URI RFC
2.2。保留字符
许多URI包含由某些组成或由其分隔的组件 特殊字符。这些字符称为“保留”,因为
它们在URI组件中的使用仅限于它们的保留
目的。如果URI组件的数据与
发生冲突 保留目的,然后必须在之前转义冲突的数据 形成URI。reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
上面的“保留”语法类指的是那些字符 在URI中是允许的,但在一个URI中是不允许的 通用URI语法的特定组件;它们用作
第3节中描述的组件的分隔符。
显然,这在卡西尼中得到了很好的实施。
答案 2 :(得分:0)
当我在web.config中启用它时,一切都开始正常工作了。