2009-09-03 141 views
1

我写了一个简单的REST集合WCF服务与REST入门套件预览2.模板项目提供了一个服务类与字典集合实例作为其内部藏品。每个项目都有一个键和一个值。REST服务:Get请求的URL具有特殊字符串参数

的问题是,如果该键包含一个“”如'ProductA.Item1',那么我对特定项目的查询将不起作用。该URL GET请求此文件是一样的东西:

http://localhost:1247/Service.svc/ProductA.Item1 

它看起来就像是IIS把URL作为一种资源,而不是通过xxx.xxx作为参数传递给我的REST服务的OnGetItem(字符串ID)方法。如果我删除“.Item1' 的一部分(建设有没有点状的按键,比如‘ProductAItem1’内部集合),它工作正常。

我甚至试图改变我WebGet属性的UriTemplate到产品({ID}),然后再尝试这种定制网址:

http://localhost:1247/Service.svc/Products(ProductA.Item1) 
    http://localhost:1247/Service.svc/Products('ProductA.Item1') 

我仍然不能达到我的代码OnGetItem(字符串ID)方法。没有点状按键,自定义网址也可以正常工作。

我不知道该点或“”在URL中是否是IIS服务器的特殊字符。如果它是特殊的字符,我怎么可以转义它或使它像内部点的字符串参数?或者我不能在我的网址中使用点?

回答

0

我相信你所遇到的问题是由方式System.Web.Routing工作类引起的。显然,这曾经是ASP.NET MVC家伙的一个问题(see blog post),但根据菲尔哈克的帖子,这个问题应该是固定的。也许REST入门工具包不使用新的Routing dll呢?

+0

这很可能。路由服务可能会阻止对OnGetItem()的调用。我将再次检查ASP.Net论坛。谢谢! – 2009-09-03 19:28:16