0

我遇到了以下问题。可能有人也发现了这种奇怪的行为。

我的 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

我收到一条错误消息,指出没有与提供的 URL 匹配的路由。

顺便说一句,我无法在 ASP.NET 开发服务器上重现此问题。它只出现在 IIS 上。可能有人确实有这样的问题?

4

3 回答 3

1
  • URL 的路径部分中的百分比编码预计会被解码,但是
  • 路径组件中的任何 + 字符都应按字面意思处理。

明确地说:+ 只是查询组件中的特殊字符。

RFC 1738(由 2396 和 3986 修改)定义了方案 (http:)、权限 (//server.example.com) 和路径 (/myfile/mypage.htm) 组件,并且没有为+ 字符。

于 2013-03-08T12:50:41.950 回答
0

+符号是段的分隔符。段是方案、权限、路径和查询。

来自URI RFC

2.2. 保留字符

许多 URI 包括由某些特殊字符组成或由某些特殊字符分隔的组件。这些字符被称为“保留”,因为
它们在 URI 组件中的使用仅限于它们的保留
用途。如果 URI 组件的数据与保留的用途发生冲突,则必须在 形成 URI
之前对冲突数据进行转义。

  reserved    = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
                "$" | ","


上面的“保留”语法类是指那些在 URI 中允许的字符,但在通用 URI 语法的特定组件中可能不允许的字符;它们被用作
第 3 节中描述的组件的分隔符。

显然,这在 Cassini 中实施得很糟糕。

于 2013-03-11T10:29:30.197 回答
0
  • 如果在 IIS 设置中禁止双重转义,则 URL 的登录路径部分不起作用。它是请求过滤策略的一部分。但是可以在 web.config 中配置 是否启用双重转义危险?

当我在我的 web.config 中启用它时,一切都开始正常工作。

于 2013-03-13T10:57:43.547 回答