Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么goo.gl短URL不返回预期的状态代码301?_C#_.net_Httprequest_Httpresponse_Http Response Codes - Fatal编程技术网

C# 为什么goo.gl短URL不返回预期的状态代码301?

C# 为什么goo.gl短URL不返回预期的状态代码301?,c#,.net,httprequest,httpresponse,http-response-codes,C#,.net,Httprequest,Httpresponse,Http Response Codes,当我向AllowAutoRedirect设置为false的URL发出HttpWebRequest时,我希望得到状态码为“Moved”或“Moved Permanently”的响应。我正在使用.NetFramework,如果我使用.NetCore,它将抛出一个带有“永久移动”状态代码的web异常 但由于某些原因,重新指向完整URL的goo.gl短URL只返回“已找到”状态代码。为什么会发生这种情况?我正在构建一个短URL解析程序,但goo.gl短URL的行为与预期不符 我正在使用下面的代码,它可以

当我向AllowAutoRedirect设置为false的URL发出HttpWebRequest时,我希望得到状态码为“Moved”或“Moved Permanently”的响应。我正在使用.NetFramework,如果我使用.NetCore,它将抛出一个带有“永久移动”状态代码的web异常

但由于某些原因,重新指向完整URL的goo.gl短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;
            }
        }
public静态字符串GetFullUrl(字符串url)
{
if(string.IsNullOrWhiteSpace(url))
返回“”;
var req=(HttpWebRequest)WebRequest.Create(url);
req.AllowAutoRedirect=false;
尝试
{
var resp=req.GetResponse();
返回resp.ResponseUri.AbsoluteUri;
}
捕获(WebException ex)
{
如果(例如响应!=null)
{
var longUrl=ex.Response.Headers[“Location”];

如果(longUrl.Contains(“?”)| | longUrl.Length什么使您认为这是意外的?这本质上是一个临时重定向响应;这里的目的可能有两个:

  • 允许google编辑URL并使其正常工作,而不需要浏览器和其他东西(代理等)忽略所有进一步的检查(忽略某些检查是可以的-关键是不要缓存得太过激进)
  • 允许更好的点击计数,不让浏览器和其他东西(代理等)不让大多数请求击中谷歌

  • 请注意,307(“临时重定向”)和302(“找到”)具有相同的语义,不同于如何处理HTTP方法;307显式保留原始HTTP方法(“POST”、“GET”等);302没有。实际上,这意味着goo.gl说的是“临时重定向”,您应该可以自由地执行“GET”“无论您最初做了什么”。请注意,301(“永久移动”)和308(“永久重定向”)具有相同的二元性,但对于非临时重定向而言。

    什么让您认为这是意外的?这本质上是一个临时重定向响应;这里的意图可能有两个:

  • 允许google编辑URL并使其正常工作,而不需要浏览器和其他东西(代理等)忽略所有进一步的检查(忽略某些检查是可以的-关键是不要缓存得太过激进)
  • 允许更好的点击计数,不让浏览器和其他东西(代理等)不让大多数请求击中谷歌

  • 请注意,307(“临时重定向”)和302(“找到”)具有相同的语义,不同于如何处理HTTP方法;307显式保留原始HTTP方法(“POST”、“GET”等);302没有。实际上,这意味着goo.gl说的是“临时重定向,您应该可以自由地执行“GET”注意301(“永久移动”)和308(“永久重定向”)具有相同的二元性,但对于非临时重定向而言。

    302看起来像一个@canton7并排查看它们,也是有用的302看起来像一个@canton7并排查看它们,也是有用的,我没有意识到“发现”是重新定向状态代码。同样在以下情况下(替换为。对于url,堆栈溢出不允许我发布)”,重新定向到google,响应标题位置似乎没有扩展的URL。我被不一致性弄糊涂了。我将更新我的代码以查找所有重新定向的代码,而不仅仅是移动/永久移动/webexception@PrashanthSubramanian3**范围内的任何内容都是重定向-同样,5**是服务器错误,4**是服务器错误(可能)客户端错误,2**表示成功,1**表示信息。我没有意识到“Found”是一个重新定向的状态代码。同样,在类似(replace-with.to the url,stack overflow将不允许我发布)”的情况下,重新定向到google,响应标题位置似乎没有扩展的URL。我被不一致性弄糊涂了。我将更新我的代码以查找所有重新定向的代码,而不仅仅是移动/永久移动/webexception@PrashanthSubramanian3**范围内的任何内容都是重定向-同样,5**是服务器错误,4**是服务器错误(可能)客户端错误,2**表示成功,1**表示信息