将路径传递给MVC4控制器

时间:2013-10-28 13:02:46

标签: asp.net-mvc-4

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

显然,我不能直接发送它,因为MVC4控制器使用正斜杠来分隔它的参数。我虽然我会安全地转移文件路径 - 例如。 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 (%).

2 个答案:

答案 0 :(得分:0)

使用通配符

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

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

答案 1 :(得分:0)

似乎MVC4正在解码文件路径,然后才检查它以获取URL中的各个字段。所以你需要对其进行dbl编码。也...

在Web.config中添加/替换..

..在system.web部分

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

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

<security>
  <requestFiltering allowDoubleEscaping="true" />
</security>
相关问题