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);
}
Другие вопросы по тегам