我们正在将应用程序从.net framework升级到.net core 2.0。
在其中,我们使用HttpWebRequest
联系AllowAutoRedirect
设置为 false 的网站。当执行的代码request.GetResponse()
站点将返回 302 响应,这在 .net 框架中是可以的 - 您可以获取响应并处理它(我们在set-cookie
标头值之后(。
但是,在 .net core 2.0 中,会抛出一个 WebException:
The remote server returned an error: (302) Found.
我的理解是否不正确,因为 302 应该导致引发异常,而不是如果 AllowAutoRedirect 设置为 false,那么仍然应该返回响应?有没有办法触发在.net框架中遇到的相同行为?
将AllowAutoRedirect
设置为false
时我遇到了同样的错误。 我通过仅在request.GetResponse()
周围包装一个try-catch
块并将异常的结果分配给变量来解决问题
WebResponse response;
try {
response = request.GetResponse();
}
catch(WebException e)) {
if(e.Message.Contains("302")
response = e.Result;
}
看看这个问题 - .NET Core 2.0 中的 HttpWebRequest 抛出 301 永久移动。简而言之,它说:
如果您设置
AllowAutoRedirect
,那么您最终将不会遵循 重定向。这意味着最终得到301响应。
HttpWebRequest
(与HttpClient
不同(会引发异常 不成功(非 200(状态代码。因此,获得异常(大多数 可能WebException
(是预期的。因此,如果您需要处理该重定向(即HTTPS -> HTTP 方式(,您需要将其捕获在 try/catch 块中并检查
WebException
等这是HttpWebRequest
的标准用法。这就是为什么我们建议开发人员使用更容易使用的
HttpClient
模式。