我有一个Endpoints.cs类,其中包含与REST服务器一起使用的所有GET和POST端点。
我在APIHelper类中做了一个通用的GET方法:
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。
答案 0 :(得分:1)
仅具有参数列表是不够的,因为您需要知道参数名称。
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