繁体   English   中英

Restsharp:自动映射查询参数

[英]Restsharp: Automatically map query parameters

我有一个 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。

仅仅拥有参数列表是不够的,因为您需要知道参数名称。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM