Как работать с вложенными запросами с помощью restclient в c # - PullRequest
0 голосов
/ 28 сентября 2018

У меня уже есть следующий код для отправки запроса:

string requestString = "https://api.bimobject.com/search/v1/products?Bearer_token=" + AccesToken + "&filter.brand.id="+BrandID;
var client = new RestClient(requestString);
var request = new RestRequest(Method.GET);
request.AddHeader("Cache-Control", "no-cache");


IRestResponse response = client.Execute(request);

Теперь я хотел бы добавить токен аутентификации, который принимает следующий формат в соответствии с документацией:

     "auth": {
        "bearer": [
           {
              "key": "token",
              "value": "374bfdca122189f8c98e41ccd7a30212",
              "type": "string"
           }
        ],
        "type": "bearer"
     },

Теперь я не уверен, как на самом деле это сделать, это кажется вложенным параметром, но я не имею ни малейшего представления, как добавить такой вложенный параметр.Я уже видел это

request.AddParameter("auth:bearer:[key:token,value:374bfdca122189f8c98e41ccd7a30212,type:string])

Так как мне поступить так?

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Исходя из примера токена в примере и предполагая, что значение хранится в переменной AccessToken,

Все, что вам нужно сделать, это добавить в запрос заголовок Authorization.

string requestString = "https://api.bimobject.com/search/v1/products?filter.brand.id=" + BrandID;
var client = new RestClient(requestString);
var request = new RestRequest(Method.GET);
request.AddHeader("Cache-Control", "no-cache");
//Assuming AccessToken = 374bfdca122189f8c98e41ccd7a30212 value in sample JSON
request.AddHeader("Authorization", $"Bearer {AccessToken}");

IRestResponse response = client.Execute(request);

При повторном использовании клиента дополнительной опцией будет создание IAuthenticator производного класса

public class BearerAuthenticator : IAuthenticator {
    private readonly string authHeader;

    public BearerAuthenticator(string accessToken) {
        if (accessToken == null)
            throw new ArgumentNullException("accessToken");

        authHeader = $"Bearer {accessToken}";
    }

    public void Authenticate(IRestClient client, IRestRequest request) {
        // only add the Authorization parameter if it hasn't been added by a previous Execute
        if (!request.Parameters.Any(p => p.Type.Equals(ParameterType.HttpHeader) &&
                                         p.Name.Equals("Authorization", StringComparison.OrdinalIgnoreCase)))
            request.AddParameter("Authorization", authHeader, ParameterType.HttpHeader);
    }
}

и присвоение его клиенту

string requestString = "https://api.bimobject.com/search/v1/products?filter.brand.id=" + BrandID;
var client = new RestClient(requestString);
client.Authenticator = new BearerAuthenticator(AccessToken);

var request = new RestRequest(Method.GET);
request.AddHeader("Cache-Control", "no-cache");

IRestResponse response = client.Execute(request);

Теперь,заголовок Authorization будет добавлен ко всем запросам, сделанным этим клиентом (при условии, что в запросе этот заголовок еще не установлен)

0 голосов
/ 30 сентября 2018

Может быть, вам нужно пропустить токен через заголовки HTTP следующим образом:

Authorization: Bearer your-token

Любой дополнительный контекст о том, что вы пытаетесь выполнить, был бы хорош, например, некоторые ссылки на документацию, еслиЗапрашиваемый вами сервис бесплатный или если POST-запросам нужен токен в теле запроса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...