2013-10-28 144 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> 
相關問題