Когда я делаю HttpWebRequest для URL-адреса с параметром AllowAutoRedirect, установленным на false, я ожидаю ответа с кодом состояния «Перемещено» или «Перемещено навсегда». Я использую .NetFramework, и если я использую .NetCore, это вызовет веб-исключение с кодом состояния «Перемещено постоянно».
Но по какой-то причине короткие URL-адреса goo.gl, которые перенаправляют на полный URL, просто верните код статуса «Найдено». Почему это происходит? Я создаю преобразователь коротких URL-адресов, но короткие URL-адреса goo.gl работают не так, как ожидалось.
Я использую приведенный ниже код, и он работает должным образом для других коротких 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;
}
}