5

使用 System.ServiceModel 库进行路由,我有一个带有简单模板的 REST 服务,看起来像

"{searchTerm}?opt={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 参数时获得相同的结果。

4

1 回答 1

2

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

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

于 2013-04-08T21:51:23.363 回答