在ASP.NET/IIS的URL中使用冒号(:)

前端之家收集整理的这篇文章主要介绍了在ASP.NET/IIS的URL中使用冒号(:)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在ASP.NET MVC中实现一个自定义控制器,并且真的希望能够在URL中使用冒号,以便我可以识别类/列名称及其值,如下所示:

http://example.com/user:chaiguy

…但显然ASP.NET或IIS不允许在URL中的冒号。我做了一些挖掘,显然它被认为是一个安全问题,但是我正在使用MVC并手动处理所有url路径(只是将它们视为字符串),而不是将它们与文件系统相关联,所以我很确定不适用。

我也听到一些关于实现一个自定义Http处理程序或某事的讨论。

任何想法或想法将不胜感激。

Er…. why? SerIoUsly,why break standards? – Randolpho

I suggest,then,that you investigate building a web service. WCF is a nice technology for that,and it hosts well in IIS.

我碰巧喜欢网址,WCF对我来说太复杂了。我希望它与url兼容,就像REST一样,但不仅仅是导航层次结构,还是做了很好的布局。与/ users / chaiguy有关的问题是解释层次结构是没有的:在我的系统中,“user”是一个类,它不是一个文件夹。用户:chaiguy是指具有“chaiguy”值的用户类的实例,它是具有子实体的潜力的单个实体。所以例如:

/用户:chaiguy /名称

…我想显示该实体的名称。如果我用你的方法做到这一点,它将如下所示:

/用户/ chaiguy /名称

问题是你如何知道课堂是什么,有什么价值?它可以解释为

/用户/ chaiguy:名称

在我的系统中,这没有意义。看看我在做什么为了给出一个稍微复杂的例子,假设我们要从多个实例中选择一个用户实体的子节点。所以用户可能有几个电子邮件地址。要选择一个,我们可以使用:

/user:chaiguy/email:me@here.com/

所以它实际上是递归的。它不是一个文件路径,它更像是一个XPath(或者可能类似于jQuery,基于我知道的几点)。也就是说,它比动态评估的查询选择多于硬连线的文件路径。它在服务器上进行评估。

不要错,我不是在这里建立一个典型的网站,甚至是网络服务。

解决方法

更改web.config中httpRuntime的requestPathInvalidCharacters属性
<httpRuntime maxRequestLength="20480" requestValidationMode="2.0" requestPathInvalidCharacters="" maxQueryStringLength="20480" />

而ASP.NET应该不再阻止请求路径中的冒号。

猜你在找的asp.Net相关文章