Заголовок авторизации не обновляется должным образом в моем HttpWebRequest - PullRequest
0 голосов
/ 04 марта 2020

Странная вещь происходит с моим HttpWebRequest ... Я хочу написать функцию, которая обновляет заголовок авторизации при необходимости (когда мы получаем 401 в ответ). В общем, что-то вроде этого:

try
{
    request.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + BadToken);
    return request.GetResponse();
}
catch (Exception e)
{
    if (e is WebException) 
    {
        var ex = (e as WebException);
        var status = (ex.Response as HttpWebResponse)?.StatusCode;

        if (status == HttpStatusCode.Unauthorized)
        {
            request.Headers.Set(HttpRequestHeader.Authorization, "Bearer " + CorrectToken);
            return request.GetResponse();
        }
    }
    return null;    
}

К сожалению, я все еще получаю 401. Но если я заменю BadToken на CorrectToken в первой строке, я получу 200 с первой попытки. Похоже, что заголовок не обновляется ... Я проверил в отладчике и вижу, что значение изменилось, но поведение говорит само за себя ...

Что здесь происходит?

1 Ответ

0 голосов
/ 04 марта 2020
  1. Несколько вызовов GetResponse возвращают один и тот же объект ответа; запрос не переиздан. Перейдите по этой ссылке: https://docs.microsoft.com/en-us/dotnet/api/system.net.httpwebrequest.getresponse?view=netframework-4.8

  2. Создайте новый экземпляр HttpWebRequest в блоке catch и выполните запрос с новым токеном.

...