C# 授权标头未在我的HttpWebRequest中正确更新

C# 授权标头未在我的HttpWebRequest中正确更新,c#,authorization,httpwebrequest,C#,Authorization,Httpwebrequest,我的HttpWebRequest发生了奇怪的事情。。。 我想写一个函数,在需要时更新授权头(当我们得到401响应时)。基本上是这样的: try { request.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + BadToken); return request.GetResponse(); } catch (Exception e) { if (e is WebException) {

我的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。 但是如果我在第一行用CorrectToken替换BadToken,我在第一次尝试中得到200。因此,标题似乎没有更新。。。我在调试器中进行了检查,可以看到值发生了更改,但行为本身就说明了问题

这是怎么回事


  • 对GetResponse的多个调用返回相同的响应对象;请求未重新发出。请参阅此链接:

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


  • 不要使用Set()函数,首先删除授权头并再次添加。这没有帮助-结果仍然是401…多次调用GetResponse返回相同的响应对象;请求未重新发出。在catch块中创建请求的新实例。