#c# #.net-core
#c# #.net-core
Вопрос:
Существует API, давайте назовем его API_ServiceProvider, который может быть вызван только с помощью токена. И токен генерируется другим API, давайте назовем его API_TokenGenerator. Теперь, чтобы вызвать API_ServiceProvider для получения данных, мне нужен токен из API_TokenGenerator. Но срок действия этого токена истекает через 10 минут. Как только у меня есть токен в течение 10 минут, я продолжаю вызывать API_ServiceProvider. Но когда он истечет, мои вызовы API_A завершатся неудачей, и мне нужно получить новый токен сейчас. Как это может наилучшим образом справиться с этим.Сетевое ядро?
Комментарии:
1. Разве вы не можете просто сохранить время истечения срока действия токена рядом с токеном и получить новый, если понимаете, что следующий вызов может превысить это время?
2. Ну, предположение владельца API_B заключается в том, что у меня не должно быть логики, основанной на времени (она может измениться). Я должен построить свою логику, чтобы принять код HttpStatus 403 и вызвать новый запрос, если произойдет 403.
3. Это действительно должно быть 401, поскольку 403 означает запрещенный, а не несанкционированный. В рамках текущей основной веб-модели (OAuth2) у вас будет доступ к времени истечения срока действия, поэтому API_B не требует его предоставления. Если это не вариант, вы можете встроить логику повторных попыток в пользовательский
HttpClientHandler
интерфейс, который вы предоставляете при создании вашегоHttpClient
, который перехватит 401 (inSendAsync()
), получит новый токен и повторит попытку. Таким образом, это было бы без проблем, где бы вы ни использовали свойHttpClient
. Однако это дополнительный вызов, который был бы ненужным, если бы вы могли его отменить.4. Спасибо за ответ @sellotape. но я просто собираюсь использовать токен для вызова API_ServiceProvider, и в идеале логика проверки токена должна быть концом API_ServiceProvider, а не моей. После получения токена от API_TokenGenerator все, что мне нужно сделать, это вызвать API_ServiceProvider с этим токеном. Я могу это сделать, введя логику повтора при вызове API_ServiceProvider, и когда я получаю сообщение об ошибке, я должен получить новый токен. Но мне нужно знать, есть ли лучший способ реализовать то же самое. Сетевое ядро
5. Также я переименовал API для лучшего понимания. API_A теперь является API_ServiceProvider, а API_B — API_TokenGenerator