0

客户端需要传递给服务器的参数之一是文件路径,例如path/to/data.

显然,我不能按原样发送它,因为 MVC4 控制器使用正斜杠来分隔其参数。我虽然我会安全的 url 转义文件路径 - 例如。path%2Fto%2Fdata,将其传输到服务器,然后在服务器上对其进行转义。

但这不起作用 - MVC4 无法识别路线。MVC4 是否对 %2f 进行转义?

更新

从浏览器中的响应来看,MVC4 似乎在检查文件路径以获取 URL 中的各个字段之前对其进行了转义。

如果我然后进行双重转义,它会报告...

The request filtering module is configured to deny a request that contains a double escape sequence

经过一段时间或阅读后,我尝试了在部分中添加到 web.config 的建议......

<security>
  <requestFiltering allowDoubleEscaping="true" />
</security>

但随后它报告...

A potentially dangerous Request.Path value was detected from the client (%).
4

2 回答 2

0

使用通配符

 routes.MapRoute("Path",
           "{*path}",
           new { 
                  controller = "Content", 
                  action = "Index", 
                  path = UrlParameter.Optional }
               );

或在 url 编码的查询字符串参数中

于 2013-10-28T13:18:43.043 回答
0

似乎 MVC4 在检查文件路径以获取 URL 中的各个字段之前对其进行解码。所以你需要对它进行 dbl 编码。还...

在 Web.config 添加/替换 ..

.. 在 system.web 部分

<httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" />
<pages validateRequest="false">

...并在 system.webserver 部分添加...

<security>
  <requestFiltering allowDoubleEscaping="true" />
</security>
于 2013-10-28T15:27:50.563 回答