授权 Header 未在我的 HttpWebRequest 中正确更新

Authorization Header is not properly updated in my HttpWebRequest

我的 HttpWebRequest 发生了奇怪的事情... 我想编写一个函数,在需要时更新授权 header(当我们得到 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。 但是,如果我在第一行用 CorrectToken 替换 BadToken,我会在第一次尝试时得到 200。所以似乎 header 没有更新...我检查了调试器,我可以看到该值已更改,但行为不言而喻...

这里发生了什么?

  1. 多次调用GetResponsereturn同一个响应对象;该请求未重新发出。参考这个link:https://docs.microsoft.com/en-us/dotnet/api/system.net.httpwebrequest.getresponse?view=netframework-4.8

  2. 在 catch 块中创建 HttpWebRequest 的新实例并使用新令牌发出请求。