我有这样的路线:如何自定义编码/解码路由值?
{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管道之前。 –