2016-06-10 130 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为行动创建一条特殊路线,并从行动中解析事情。