【发布时间】:2010-10-14 14:58:16
【问题描述】:
我正在 ASP.NET MVC 中实现一个自定义控制器,真的希望能够在 url 中使用冒号,以便我可以识别类/列名称及其值,例如所以:
http://example.com/user:chaiguy
...但显然 ASP.NET 或 IIS 不允许在 url 中使用冒号。我做了一些挖掘,显然这被认为是一个安全问题,但是,我正在使用 MVC 并手动处理 all url 路径(只是将它们视为字符串),而不是将它们与文件系统相关联,所以我很确定这不适用。
我还听到一些关于实现自定义 Http 处理程序或其他内容的讨论。
任何想法或想法将不胜感激。
呃....为什么?说真的,为什么要打破标准? ——兰多夫
...
那么,我建议您研究构建 Web 服务。 WCF 是一种很好的技术,它在 IIS 中很好地托管。
我碰巧喜欢 url,而 WCF 对我来说太复杂了。我希望它像 REST 一样与 url 兼容,但不仅仅能够导航层次结构,或者做布局合理的事情。我对 /users/chaiguy 的问题是它正在解释没有层次结构:在我的系统中,“用户”是一个类,它不是一个文件夹。 user:chaiguy 表示值为“chaiguy”的用户类的实例,它是一个单一实体,具有子实体的潜力。比如:
/user:chaiguy/name
...我想显示该实体的名称。如果我用你的方法做到这一点,它会是这样的:
/users/chaiguy/name
问题是你怎么知道什么是类和价值是什么?可以理解为
/users/chaiguy:name
在我的系统中,这没有意义。看看我在说什么?举一个稍微复杂一点的例子,假设我们想从多个实例中选择用户实体的一个子实体。因此,一个用户可能有多个电子邮件地址。要选择一个,我们可以使用:
/user:chaiguy/email:me@here.com/
所以它实际上是递归的。它不是文件路径,它更像是 XPath(或者可能类似于 jQuery,基于我对它的了解甚少)。也就是说,它更像是动态评估的查询选择,而不是硬连线的文件路径。它在服务器上进行评估。
别搞错了,我不是在这里建立一个典型的网站甚至网络服务。
【问题讨论】:
-
什么版本的 IIS? 6?
-
老实说,我现在只是在 ASP.NET 开发服务器中运行它,不能 100% 确定我的实际 Web 主机正在运行什么。
-
啊。然后冒号会在碰到 HttpHandler 之前被拦截。所以你可能是 S.O.L.
-
有同样的问题,我注意到,维基百科在路径段中使用冒号:2001: A Space Odyssey。他们不是互联网上排名第三的网站吗?另请注意,在 Firefox 中,如果您复制地址,它会编码括号而不是冒号。然而,如果你调用 encodeURIComponent(':'),你会得到 "%3A"。那是我的试金石。冒号是禁区(太糟糕了,我也有这个用处)。
-
确实,维基百科到处都使用冒号,即使是在没有明显好处的非常显眼的地方,例如他们的contact us 页面。你想知道,如果它如此危险,他们如何逃脱它?当然,我知道 wikipedia 不使用 .NET,但问题(无论如何对我来说)确实围绕冒号是否是 URL 中的 合法 字符,无论平台如何。
标签: asp.net iis url httphandler colon