.NET Core 2.0 中的 HttpWebRequest 抛出 302 发现异常



我们正在将应用程序从.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模式。

相关内容

最新更新