版本之间的 RestSharp 行为更改 - rest 请求参数中的令牌替换



我们正在升级我们使用的RestSharp版本,以获得对.NET Core的支持。

旧版本是 105.2.3,新版本目前是 106.4.0(但以下内容同样适用于 GITHub 上最新的 RestSharp 代码(

给定以下代码:

var request = new RestRequest("/webacs/api/v1/data/{reportType}.json?.full=true&collectionTime=ge({collectionTime})&.firstResult={firstResult}");
request.AddParameter("reportType", "HistoricalClientTraffics", ParameterType.UrlSegment);
request.AddParameter("collectionTime", 1497722400000, ParameterType.UrlSegment);
request.AddParameter("firstResult", 0, ParameterType.UrlSegment);

使用 RestSharp 105.2.3,当执行请求 (GET( 时,所有三个 UrlSegment 参数都会导致发生令牌替换并生成如下所示的 URL:

/webacs/api/v1/data/HistoricalClientTraffics.json?.full=true&collectionTime=ge(1497722400000)&.firstResult=0

使用 RestSharp106.4.0(以及来自 GITHub 的最新 RestSharp 源代码(,只会在"?"之前替换令牌。 "?"以外的替换不再发生,并生成错误的 URL:

/webacs/api/v1/data/HistoricalClientTraffics.json?.full=true&collectionTime=ge(%7BcollectionTime%7D)&.firstResult=%7BfirstResult%7D

(7B 和 7D 分别是"{"和"}"的 ASCII 代码(

这种行为的改变是"有意为之"吗?

(通过显式执行自己的令牌替换来解决此问题很容易(

这确实是设计使然。虽然从技术上讲,URL也包括查询,但RestSharp更接近WebAPI语义。UrlSegment可以看作是FromRouteQueryParameter的对应物 -FromQuery.

因此,当您具有 URLhttp://blah.com/customers/{customerId}并使用以下代码时:

request.AddUrlSerment("customerId", "123");
request.AddQueryParameter("foo", "bar");

它将生成对http://blah.com/customers/123?foo=bar的请求。

最新更新