我正在ASP.NET MVC中实现一个自定义控制器,并且真的希望能够在url中使用冒号,这样我就可以识别类/列名称及其值,如下所示:
http://example.com/user:chaiguy
...但显然ASP.NET或IIS不允许在网址中使用冒号.我做了一些挖掘,显然它被认为是一个安全问题,但是,我正在使用MVC并且手动处理所有 url路径(只是将它们视为字符串),而不是将它们与文件系统相关联,所以我很确定这个不适用.
我也听过一些关于实现自定义Http处理程序的讨论.
任何想法或想法将不胜感激.
呃....为什么?说真的,为什么打破标准? - 兰道夫
...
那么,我建议您调查构建Web服务.WCF是一个不错的技术,它在IIS中运行良好.
我碰巧喜欢网址,而WCF对我来说太复杂了.我希望它与url兼容,如REST,但不仅能够导航层次结构,还能做好布局的事情.我用/ users/chaiguy的问题是它解释了没有的层次结构:在我的系统中"user"是一个类,它不是一个文件夹.user:chaiguy表示具有值为"chaiguy"的用户类的实例,并且该单个实体具有子实体的潜力.例如:
/user:chaiguy/name
...我想显示该实体的名称.如果我使用您的方法执行此操作,它将如下所示:
/users/chaiguy/name
问题是你怎么知道什么是班级,有什么价值?它可以解释为
/users/chaiguy:name
在我的系统中,这没有意义.看看我的目标是什么?为了给出稍微复杂的示例,假设我们想要从多个实例中选择用户实体的子代.因此用户可能有多个电子邮件地址.要选择一个,我们可能会使用:
/user:chaiguy/email:me@here.com/
所以它实际上是递归的.它不是一个文件路径,它更像是一个XPath(或者类似于基于我所知甚少的jQuery).也就是说,它更像是动态评估的查询选择而不是硬连线文件路径.它在服务器上进行评估.
别搞错了,我不是在这里建立一个典型的网站甚至是网络服务.
更改web.config中的requestPathInvalidCharacters
属性httpRuntime
:
并且ASP.NET不应再阻止请求路径中的冒号.