奇怪的事情发生在我的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。因此,似乎标头没有更新...我在调试器中签入,可以看到该值已更改,但是这种行为不言而喻...
这里发生了什么?
多次调用GetResponse返回相同的响应对象;该请求不会重新发出。引用此链接:https://docs.microsoft.com/en-us/dotnet/api/system.net.httpwebrequest.getresponse?view=netframework-4.8
在catch块中创建HttpWebRequest的新实例,并使用新令牌发出请求。