授权 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 没有更新...我检查了调试器,我可以看到该值已更改,但行为不言而喻...
这里发生了什么?
多次调用GetResponsereturn同一个响应对象;该请求未重新发出。参考这个link:https://docs.microsoft.com/en-us/dotnet/api/system.net.httpwebrequest.getresponse?view=netframework-4.8
在 catch 块中创建 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 没有更新...我检查了调试器,我可以看到该值已更改,但行为不言而喻...
这里发生了什么?
多次调用GetResponsereturn同一个响应对象;该请求未重新发出。参考这个link:https://docs.microsoft.com/en-us/dotnet/api/system.net.httpwebrequest.getresponse?view=netframework-4.8
在 catch 块中创建 HttpWebRequest 的新实例并使用新令牌发出请求。