RestSharp - аутентификация токена
Я пытаюсь отправить запрос GET с аутентификацией токена, но я получаю неавторизованный ответ. Если я отправлю такой же запрос на Почтальон, он работает.
Вот мой код:
string url = string.Format("{0}batchs", MyUrl);
RestClient client = new RestClient(url);
RestRequest getRequest = new RestRequest(Method.GET);
getRequest.AddHeader("Accept", "application/json");
getRequest.AddHeader("Authorization", "token " + MyToken);
getRequest.AddParameter("name", MyName, ParameterType.QueryString);
IRestResponse getResponse = client.Execute(getRequest);
И вот моя просьба почтальона:
Есть идеи как это исправить?
Спасибо!
2 ответа
Я точно не знаю, какой тип аутентификации вы используете, но я использую токен firebase, сгенерированный во время выполнения, и это единственное, что я могу заставить меня работать.
request.AddHeader("authorization", "Bearer " + _fireBaseService.AuthToken);
Я столкнулся с аналогичной проблемой в своей реализации. Я исследовал различные решения, но ни одно из них пока не оказалось эффективным. В конце концов я обнаружил, что Postman автоматически обрабатывает перенаправление HTTP. Однако при использовании RestSharp для реализации заголовки, которые мы изначально установили, не включаются в перенаправленный запрос.
Чтобы проверить, отключите параметр «Автоматически следовать перенаправлениям» в Postman. Если после отключения этого параметра проблема в Postman по-прежнему сохраняется, это указывает на то, что проблема связана с процессом извлечения.
Поэтому я добавил проверку, которая повторно отправляет запрос API на получение ошибки 401 с приведенным ниже кодом.
... rest of your code
RestResponse response = await client.ExecuteAsync(request);
int numericStatusCode = (int)response.StatusCode;
if (numericStatusCode == 401)
{
var redirectedClient = new RestClient(response.ResponseUri.ToString());
var newResponse = redirectedClient.Execute(request);
Console.WriteLine(newResponse.ResponseStatus);
}
Вот мой полный код:
var url = $"{_apiCredentials.DataServer}/test/data/contracts/";
var options = new RestClientOptions(url)
{
MaxTimeout = -1,
Authenticator = new OAuth2AuthorizationRequestHeaderAuthenticator(
accessToken.Token, // Update the token
"Bearer")
};
var client = new RestClient(options);
var request = new RestRequest("", Method.Get);
RestResponse response = await client.ExecuteAsync(request);
int numericStatusCode = (int)response.StatusCode;
if (numericStatusCode == 401)
{
var redirectedClient = new
RestClient(response.ResponseUri.ToString());
var newResponse = redirectedClient.Execute(request);
Console.WriteLine(newResponse.ResponseStatus);
}