我正在ASP.NET MVC中实现自定义控制器,并且希望能够在URL中使用冒号,以便可以标识类/列名及其值,例如:
http://example.com/user:chaiguy
但显然ASP.NET或IIS不允许在URL中使用冒号。 我进行了一些调查,似乎这被认为是一个安全问题,但我使用的是MVC并手动处理所有URL路径(将它们只视为字符串),而不与文件系统关联,因此我非常确定这不适用。
我还听说过实现自定义Http处理程序之类的话题。
非常感谢任何想法或建议。
...
我建议你构建一个web服务。WCF是一个不错的技术,可以很好地托管在IIS中。
我喜欢URLs,并且对于我的需求来说,WCF太复杂了。 我希望它与REST一样与url兼容,但能够做更多事情,而不仅仅是导航层次结构或执行良好的操作。 我对/users/chaiguy有问题,因为它解释了没有层次结构的东西:在我的系统中,“user”是一个类,而不是一个文件夹。 user:chaiguy表示具有“chaiguy”值的user类的实例,它是单个实体,可能具有子实体。 例如:
/user:chaiguy/name
…我想要显示该实体的名称。如果我用您的方法来做这件事,它会像这样:
/users/chaiguy/name
问题在于你如何知道哪个是类,哪个是值? 在我的系统中,它可以被解释为
/users/chaiguy:name
这在我的系统中没有意义。 看到我的意思了吗? 再举一个稍微复杂一点的例子,假设我们想从多个实例中选择用户实体的子项。 因此,用户可能有几个电子邮件地址。 要选择其中一个,我们可以使用:
/user:chaiguy/email:me@here.com/
因此,它实际上是递归的。 它不是文件路径,而更像是XPath(或根据我所知道的内容,可能类似于jQuery)。也就是说,它更像是动态评估的查询选择,而不是硬连线的文件路径。 它在服务器上计算。
毫无疑问,我正在构建的不是典型的网站甚至不是Web服务。