2011-09-30 69 views
3

我需要能夠在控制器中允許「+」符號進行某些操作。我建立一個標籤過濾引擎,允許這樣的事情(如計算器):/東西/標記/標籤名稱-1 +標籤名-2 +其他標籤允許在MVC 3中加上URL

我知道我可以在設置allowDoubleEscaping="true" web.config,但這不是出於安全原因的最佳實踐。

我猜測有一種方法可能使用global.asax中的自定義文件管理器或其他註冊表?

回答

3

StackOverflow可能將+視爲空白。他們最有可能映射路線/Stuff/Tagged/{*tags}並在標籤上呼叫string.split()。如果你不允許你的標籤中有空白,這實際上效果很好。

+0

這正是我正在做的。但IIS7允許'+'登錄url的唯一方法是在web.config中允許使用DoubleEscaping,這可能會帶來安全風險。 –

+1

它可能有點過分偏執,請參閱http://stackoverflow.com/questions/1453218/is-enabling-double-escaping-dangerous –

+1

你是對的,它太偏執。對於其他人來說,Wyatt的解決方案就是我目前使用的解決方案,而且效果很好。 –

0

+表示網址中的空白。您應該對它們進行URL編碼:

/Stuff/Tagged/tag-name-1%2Btag-name-2%2Bother-tag 
+1

我意識到這一點......但它不是視覺上的吸引力,不達到目的在這種情況下。現在有更多的網站正在使用URL中的加號來表示它的意思,比如Stack Overflow爲其標籤所做的。 –

+2

這是不可能的,因爲[W3C](http://www.w3.org/Addressing/URL/5_BNF.html)標準指定+表示URL中的空格。 – Zasz

0

您可以使用簡單的替換:

string url = Url.Action("Index", "YourController"); 
url = url.Replace("%2b", "+");