使用系统。我有一个REST服务和一个简单的模板,看起来像
" {searchTerm} ?选择= {someSearchOpt}
所以调用看起来像:
http://myhost.contoso.com/searchapi/river%20expeditions
在没有选项的情况下搜索短语"river expeditions"。
这只是接受一个搜索短语并返回结果。它工作得很好。但是,如果搜索包含文字&符号的短语,例如"Lewis&Clark",我尝试使用url编码&符号
路易斯% 26克拉克
,但即使这样,请求甚至从未被路由,但服务器立即返回一个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参数时获得相同的结果。
这个线程有一个类似的问题解决方案。
正如上面链接的答案所提到的,我会避免在uri中使用url编码字符,而是将它们放在查询字符串部分。