Restsharp:自动映射查询参数
Restsharp: Automatically map query parameters
我有一个 class Endpoints.cs,其中包含我用于 REST 服务器的所有 GET 和 POST 端点。
我在我的 APIHelper 中创建了一个通用的 GET 方法 class:
public static T Get<T>(string endpoint, string[] qArgs) where T : new()
{
RestRequest request = new RestRequest(endpoint);
var response = client.Get<T>(request);
return (T)response.Data;
}
现在,我的一些端点包含查询参数。
如何修改该方法,使其自动读取 qArgs 并将它们应用到带有 .AddUrlSegment 的端点?
Ofc,我不知道哪个端点将在 Get() 中结束,因此该方法应该以某种方式知道要将哪个 urlsegment 映射到该特定值。
我正在使用 Restsharp 和 Newtonsoft.json。
仅仅有一个参数列表是不够的,因为您需要知道参数名称。
RestSharp 支持添加查询参数而不在请求中指定它们URL,使用URL段参数时只需要{}中的参数名称。如果你接受这个默认值,你可以做你想做的事。
public static T Get<T>(string endpoint, params KeyValuePair[] parameters) where T : new()
{
var request = new RestRequest(endpoint);
foreach (var parameter in parameters)
{
if (endpoint.Contains($"{{{parameter.Key}}}")
request.AddUrlSegmentParameter(parameter.Key, parameter.Value);
else
request.AddQueryStringParameter(parameter.Key, parameter.Value);
}
var response = client.Get<T>(request);
return response.Data;
}
所以当你打电话给
Get<Blah>(
"/something/{id}",
new KeyValuePair("id", "123"),
new KeyValuePair("sort", "asc")
);
它会将您的请求发送到 http://baseurl/something/123?sort=asc
我有一个 class Endpoints.cs,其中包含我用于 REST 服务器的所有 GET 和 POST 端点。
我在我的 APIHelper 中创建了一个通用的 GET 方法 class:
public static T Get<T>(string endpoint, string[] qArgs) where T : new()
{
RestRequest request = new RestRequest(endpoint);
var response = client.Get<T>(request);
return (T)response.Data;
}
现在,我的一些端点包含查询参数。 如何修改该方法,使其自动读取 qArgs 并将它们应用到带有 .AddUrlSegment 的端点? Ofc,我不知道哪个端点将在 Get() 中结束,因此该方法应该以某种方式知道要将哪个 urlsegment 映射到该特定值。
我正在使用 Restsharp 和 Newtonsoft.json。
仅仅有一个参数列表是不够的,因为您需要知道参数名称。
RestSharp 支持添加查询参数而不在请求中指定它们URL,使用URL段参数时只需要{}中的参数名称。如果你接受这个默认值,你可以做你想做的事。
public static T Get<T>(string endpoint, params KeyValuePair[] parameters) where T : new()
{
var request = new RestRequest(endpoint);
foreach (var parameter in parameters)
{
if (endpoint.Contains($"{{{parameter.Key}}}")
request.AddUrlSegmentParameter(parameter.Key, parameter.Value);
else
request.AddQueryStringParameter(parameter.Key, parameter.Value);
}
var response = client.Get<T>(request);
return response.Data;
}
所以当你打电话给
Get<Blah>(
"/something/{id}",
new KeyValuePair("id", "123"),
new KeyValuePair("sort", "asc")
);
它会将您的请求发送到 http://baseurl/something/123?sort=asc