AutoRest требует ServiceClientCredentials в конструкторе, но я не могу получить эти данные без создания экземпляра объекта client - PullRequest
0 голосов
/ 06 июня 2019

Я сгенерировал клиент API с помощью AutoRest и использую параметр --add-credentials, чтобы я мог передать токен на предъявителя. Чтобы получить токен, мне нужно иметь возможность создать экземпляр объекта и вызвать мой метод входа в систему следующим образом:

var client = new IOIWebAPI(new Uri("https://localhost:44325", UriKind.Absolute));
var loginResult = client.Login(authModel);

Проблема в том, что каждый конструктор требует ServiceClientCredentials. Из того, что я понимаю, мне нужно создать экземпляр TokenCredentials, который включает строку токена. Но я не могу этого сделать, потому что не могу получить строку токена без вызова Login. И я не могу позвонить, не имея строку токена.

Я уверен, что просто неправильно понимаю, как использовать API-клиент. Но есть идеи, что я здесь делаю не так?

1 Ответ

0 голосов
/ 12 июня 2019

Мое лучшее предположение состоит в том, что --add-credentials не поддерживает неаутентифицированные конечные точки.Когда вы добавляете кредиты, AutoRest предполагает, что все требует авторизации.Я отправил проблему для этого, но я подозреваю, что она не будет решена в ближайшее время.

Мой обходной путь - создать класс TokenHelper.Я скопировал и вставил код, сгенерированный AutoRest из моей конечной точки входа в систему, в этот класс.Таким образом, код остается непротиворечивым, но он не идеален, потому что я могу забыть обновить конечную точку, если она когда-либо изменится.

var tokenHelper = new TokenHelper(baseUri);
var tokenResult = tokenHelper.GetTokenAsync(authModel).GetAwaiter().GetResult();

var token = new TokenCredentials(tokenResult.AccessToken, "Bearer");
var client = new IOIWebAPI(baseUri, token);
...