Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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# 如何通过编程延长缩短的URL_C#_Http_Url Shortener - Fatal编程技术网

C# 如何通过编程延长缩短的URL

C# 如何通过编程延长缩短的URL,c#,http,url-shortener,C#,Http,Url Shortener,我需要得到一个缩短的url的最终目的地的url。目前,我正在做以下似乎有效的工作: var request = WebRequest.Create(shortenedUri); var response = request.GetResponse(); return response.ResponseUri; 但是有人能提出更好的方法吗?如果这个缩短的url是由某个在线服务提供商生成的,那么只有这个服务提供商才存储短url和实际url之间的映射。

我需要得到一个缩短的url的最终目的地的url。目前,我正在做以下似乎有效的工作:

        var request = WebRequest.Create(shortenedUri);
        var response = request.GetResponse();
        return response.ResponseUri;

但是有人能提出更好的方法吗?

如果这个缩短的url是由某个在线服务提供商生成的,那么只有这个服务提供商才存储短url和实际url之间的映射。因此,您需要通过向该提供者发送HTTP请求来查询该提供者,就像您所做的那样。另外,不要忘记通过使用语句将IDisposable资源包装在
中,从而正确处理这些资源:

var request = WebRequest.Create(shortenedUri);
using (var response = request.GetResponse())
{
    return response.ResponseUri;
}
如果服务提供商支持HEAD谓词,您也可以使用此谓词并读取位置响应HTTP头,该头必须指向实际url。或者,您可以在请求对象上将属性设置为false,然后读取位置响应HTTP头。这样,当您不感兴趣时,客户端就不会重定向到实际资源并获取整个响应体


当然,最好的方法是,如果您的在线服务提供商提供一个API,允许您直接从短url向您提供实际url。

如果此短url由某个在线服务提供商生成,则只有此服务提供商存储短url和实际url之间的映射。因此,您需要通过向该提供者发送HTTP请求来查询该提供者,就像您所做的那样。另外,不要忘记通过使用
语句将IDisposable资源包装在
中,从而正确处理这些资源:

var request = WebRequest.Create(shortenedUri);
using (var response = request.GetResponse())
{
    return response.ResponseUri;
}
如果服务提供商支持HEAD谓词,您也可以使用此谓词并读取位置响应HTTP头,该头必须指向实际url。或者,您可以在请求对象上将属性设置为false,然后读取位置响应HTTP头。这样,当您不感兴趣时,客户端就不会重定向到实际资源并获取整个响应体


当然,最好的方法是,如果您的在线服务提供商提供一个API,允许您直接从一个短url向您提供实际url。

您确实需要发出HTTP请求,但您不需要遵循重定向,默认情况下,
WebRequest
将执行重定向。下面是一个仅提出一个请求的简短示例:


请注意,这意味着如果“加长”URL本身是一个重定向,您将不会像在原始代码中那样获得“最终”URI。同样地,如果加长的URL无效,您将无法发现这一点-您将只获得您将重定向到的URL。这是否是一件好事取决于您的用例…

您确实需要发出HTTP请求,但不需要遵循重定向,默认情况下,
WebRequest
将执行重定向。下面是一个仅提出一个请求的简短示例:


请注意,这意味着如果“加长”URL本身是一个重定向,您将不会像在原始代码中那样获得“最终”URI。同样地,如果加长的URL无效,您将无法发现这一点-您将只获得您将重定向到的URL。这是否是一件好事取决于您的用例…

您在寻找哪种“更好的”产品?(顺便说一句,您应该处理响应-使用
using
语句。)如tinyurl或bt.ly中所述缩短?对于这些,您需要发出某种形式的请求,以查看它们将您重定向到何处。您当前的方法有什么问题?@JonSkeet我只是想知道创建完整的WebRequest是否过火了?@Richard:事实上,请参阅我的答案-可以改进,在引擎盖下发出更少的HTTP请求。什么样的“更好”你在找什么?(顺便说一句,您应该处理响应-使用
using
语句。)如tinyurl或bt.ly中所述缩短?对于这些,您需要发出某种形式的请求,以查看它们将您重定向到何处。您当前的方法有什么问题?@JonSkeet我只是想知道创建完整的WebRequest是否过火了?@Richard:事实上,请参阅我的答案-它可以改进,即在引擎盖下发出更少的HTTP请求。使用(var response=WebRequest.Create(shortenedURL.GetResponse()){return response.ResponseUri;}
使用(var response=WebRequest.Create(shortenedURL.GetResponse()){return response.ResponseUri;}