是否可以使用&符号的REST url参数?

时间:2013-04-05 00:00:09

标签: c# .net rest

使用System.ServiceModel库进行路由,我有一个REST服务,其中包含一个看起来像

的简单模板
  

“{} SEARCHTERM?选择= {someSearchOpt}

所以电话会是这样的:

  

http://myhost.contoso.com/searchapi/river%20expeditions

搜索没有选项的短语“河流探险”。

这只是接受一个搜索短语并返回结果。它工作得很好。但是,如果搜索包含文字&符号的短语,例如“Lewis& Clark”,我尝试使用明显的url编码&符号

  

路易斯%26Clark

但即便如此,请求永远不会被路由,但服务器会立即返回400 Bad Request。很明显,它被解释为查询字符串分隔符,并使请求无效,因为此特定模板需要一个url参数并且没有前面的“?”分隔符。

由于这些搜索短语可能包含其他受限字符,因此需要通过客户端编码的URL进行编码,并且当它们成功路由时,REST api会对参数调用HttpUtility.UrlDecode。所以我的问题是,如果有一些技术可以将url编码的&符号正确路由为rest url参数,而不是作为查询字符串分隔符进行预先解释和拒绝?

更新:对于记录,如果搜索词期望作为查询字符串参数(不是url参数),则发送 Lewis%26Clark 可以正常工作。例如

  

http://myhost.contoso.com/searchapi?searchTerm=lewis%26clark

因此,为了澄清,我希望在REST模板中使用url参数时获得相同的结果。

1 个答案:

答案 0 :(得分:1)

This线程有一个类似的问题\解决方案。

正如上面链接的答案中所提到的,我会避免在uri中对url进行编码,而是将它们放在查询字符串部分中。