2016-06-10 129 views
5

控制器:如何編碼 '/' 在ASP.NET MVC剃刀

public ActionResult Tool(string id) 
{ 
    // Code goes here . . 
} 

查看:

<a href="/Home/@item.Type/@Url.Encode(item.Title)" id="toolTitleLink">@item.Title</a> 

從上面的代碼@item.Title可以有特殊字符,如 '/' 樣本鏈接http://localhost:39727/Home/Tool/C+Compiler+For+The+Pic10%2f12%2f16+Mcus當我嘗試導航到該鏈接Tool Controller未被調用時。我用@Url.Encode,但仍然沒有調用Controller

+1

您可以在*/Home/Tool/*之後的所有符號中使用catchall路徑捕獲** id **中的所有符號。看到這[回答](http://stackoverflow.com/a/6328758/1770952) –

+0

謝謝@IvanGritsenko它的工作原理,但我想將它應用到多個操作,我需要爲每個操作創建自定義路由? – simpleProgrammer

回答

2

不幸的是,即使您使用System.Uri.EscapeDataString,而不是Url.Encode像這樣:

<a href="/Home/@item.Type/@System.Uri.EscapeDataString(item.Title)" id="toolTitleLink">@item.Title</a> 

呈現的頁面將有編碼的斜線(看在頁面的「查看源文件」),瀏覽器仍然會對其進行解碼。

你有兩個選擇,據我可以看到:

  1. 使用一個不同的角色 - 讓自己的逃生(這麼說) - 使用蒂爾達(〜)或任何其他爲例) URL valid character你想要的,以取代正斜槓。

  2. 通過a catch-all at the end爲行動創建一條特殊路線,並從行動中解析事情。