2013-10-28 115 views
0

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

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

但这不起作用 - MVC4无法识别路线。 MVC4是否会忽略%2f或什么?

UPDATE

在好像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 (%). 
+0

你最近怎么样?给我们一些代码! – Fals

+0

@Fals,你想要什么部分的代码?有很多。客户端在Python中。我不thik这是相关的,因为我可以看到它有url编码的路径。或者你想要路由配置? – spiderplant0

+0

你在网址中使用了*吗? –

回答

0

使用通配符

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

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

+0

谢谢,你是说'路径%2Fto%2Fdata'无法正常工作吗? (也许是其他一些bug) – spiderplant0

+0

控制器中是否有参数“string path”,并且之前没有匹配的路由吗?尝试在控制器中设置一个断点,看看它是否到达那里 –

+0

是的,这是正确的。如果我发送例如'path_to_data'它工作正常 – spiderplant0

0

好像它会检查它来获得在URL中的各个领域之前MVC4被解码的文件路径。所以你需要dbl对它进行编码。此外...

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

..在对System.Web部分

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

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

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