【发布时间】:2020-10-09 12:48:19
【问题描述】:
当我向一个将 AllowAutoRedirect 设置为 false 的 URL 发出 HttpWebRequest 时,我希望得到一个 StatusCode 为“已移动”或“永久移动”的响应。我正在使用 .NetFramework ,如果我使用 .NetCore,它会抛出带有“Moved Permenently”状态代码的 Web 异常。
但由于某种原因,goo.gl 短 URL 重定向到完整 URL,只返回“找到”状态代码。为什么会这样?我正在构建一个短 URL 解析器,但 goo.gl 短 URL 的行为不符合预期。
我正在使用下面的代码,它对其他短 URL 的工作方式与预期一样。
public static string GetFullUrl(string url)
{
if (string.IsNullOrWhiteSpace(url))
return "";
var req = (HttpWebRequest)WebRequest.Create(url);
req.AllowAutoRedirect = false;
try
{
var resp = req.GetResponse();
return resp.ResponseUri.AbsoluteUri;
}
catch (WebException ex)
{
if (ex.Response != null)
{
var longUrl = ex.Response.Headers["Location"];
if (longUrl.Contains('?') || longUrl.Length <= 35 || longUrl.StartsWith("https://news.google.com/"))
{
return GetFullUrl(longUrl);
}
return longUrl;
}
return url;
}
catch (Exception)
{
return url;
}
}
【问题讨论】:
-
302 看起来像reasonable header to use
-
@canton7 可以并排查看,this page 也很有用
标签: c# .net httprequest httpresponse http-response-codes