我有這樣的路線:如何自定義編碼/解碼路由值?
{controller}/{id}/{action}
因爲我覺得它使來自REST風格的角度來看更有意義。
問題是id
可能包含斜槓(/
),並且即使編碼爲「%2F」,那些也被視爲路由分隔符。甚至當我在這個地方web.config部分,:
<uri>
<schemeSettings>
<add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes" />
<add name="https" genericUriParserOptions="DontUnescapePathDotsAndSlashes" />
</schemeSettings>
</uri>
因爲我在中間id
我不能使用{*id}
的做法,拍攝包括action
路線的其餘部分。
它看起來像我唯一的選擇是將/
編碼爲符合RFC規範的字符,如!
,但我不想使用控制器內的特設自定義代碼。我想要控制器收到完整的id
,已經解碼。我希望我的Url.Action
能夠生成正確編碼的URL。這是從MVC要求太多,還是我需要分散ActionFilters和自定義URL助手?
我能找到的唯一方法是拋出一個自定義IRouteConstraint
來操縱它接收的RouteValueDictionary
。這聽起來像一個骯髒的黑客:一個操縱其輸入的約束。上帝知道它的副作用。你認爲這是一個足夠理智的想法,還是有一個更好的ASP.NET MVC機制允許?
編輯:此解決方法僅適用於解析路徑時,不適用於生成路徑。
你總是可以寫一個[自定義的HttpModule(HTTP:/ /stackoverflow.com/questions/7251285/iis-treats-double-encoded-forward-slashes-in-urls-differently-on-the-first-reque)來處理這個它到達MVC管道之前。 –