2016-12-27 118 views
1

我正在开发一个应用程序,我需要基于用户提供的网址捕获基本的详细信息,如标题,描述和网站图像。从C#中缩短网址获得完整的网址.net

但用户可输入www.google.com insted的的http://www.google.com但C#.NET代码无法为“www.google.com”检索数据通过下面的代码

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(url)); 
request.Method = WebRequestMethods.Http.Get; 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
StreamReader reader = new StreamReader(response.GetResponseStream()); 
String responseString = reader.ReadToEnd(); 
response.Close(); 

,发现错误,如“无效URI:无法确定URI的格式。“

所以,要知道任何技术,以缩短网址的基础上找到完整的网址。

for ex。 google.com或www.google.com 预期输出:http://www.google.comhttps://www.google.com

PS:我在网上找到的网络工具(http://urlex.org/),将返回基于缩短的URL完整网址提前

感谢。

+0

看起来你可以使用'urlex.org' api,但你需要一个专业账户! – Bassie

+0

为什么使用这个,如果你只能使用一些C#代码? –

+0

帕特里克是正确的,你应该使用他的方法,但如果你想尝试一个API,这里似乎也有一个免费的:http://expandurl.com/api.php – Bassie

回答

2

您可以使用UriBuilder创建一个URL与HTTP为默认方案:

UriBuilder urb = new UriBuilder("www.google.com"); 

Uri uri = urb.Uri; 

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri); 

request.Method = WebRequestMethods.Http.Get; 

string responseString; 
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
{ 
    using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
    { 
     responseString = reader.ReadToEnd(); 
    } 
} 

如果URL中包含一个方案,它将使用一个,而不是默认的HTTP方案。我也用using来释放所有非托管资源。

+0

感谢帕特里克的支持和时间 –

1

所以,要知道任何技术,基于缩短url找到完整的网址。

我可能在这里误解了你的问题,但是如果缺少它,你不能追加“http://”吗?

string url = "www.google.com"; 

if (!url.StartsWith("http")) 
    url = $"http://{url}"; 
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(url)); 
request.Method = WebRequestMethods.Http.Get; 
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
{ 
    String responseString = reader.ReadToEnd(); 
} 

这基本上是一个网页浏览器做什么时,你不指定任何协议。

+0

这也是替代解决方案,但帕特里克更适合我 –