Restsharp: автоматически отображать параметры запроса - PullRequest
0 голосов
/ 09 января 2020

У меня есть класс Endpoints.cs, который содержит все конечные точки GET и POST, которые я использую с моим REST-сервером.

Я создал обобщенный c метод GET в своем классе APIHelper:

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? Из c я не знаю, какая конечная точка окажется в Get (), поэтому метод должен каким-то образом знать, какой URL-сегмент сопоставить с этим конкретным значением.

Я использую Restsharp и Newtonsoft. json.

1 Ответ

1 голос
/ 09 января 2020

Недостаточно просто иметь список параметров, так как вам нужно знать имена параметров.

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

...