我需要一个能从url部分返回正确url的函数(比如在浏览器中)
string GetUrl(string actual,string path) {
return newurl;
}
例如:
GetUrl('http://example.com/a/b/c/a.php','z/x/c/i.php') -> http://example.com/a/b/c/z/x/c/i.php
GetUrl('http://example.com/a/b/c/a.php','/z/x/c/i.php') -> http://example.com/z/x/c/i.php
GetUrl('http://example.com/a/b/c/a.php','i.php') -> http://example.com/a/b/c/i.php
GetUrl('http://example.com/a/b/c/a.php','/o/d.php?b=1') -> http//example.com/o/d.php?b=1
GetUrl('http://example.com/a/a.php','./o/d.php?b=1') -> http//example.com/a/o/d.php?b=1
Anu建议?
答案 0 :(得分:3)
您需要的是System.UriBuilder类:http://msdn.microsoft.com/en-us/library/system.uribuilder.aspx
CodeProject上还有一个轻量级的解决方案,它不依赖于System.Web:http://www.codeproject.com/KB/aspnet/UrlBuilder.aspx
还有一个查询字符串构建器(但我之前没有尝试过):http://weblogs.asp.net/bradvincent/archive/2008/10/27/helper-class-querystring-builder-chainable.aspx
答案 1 :(得分:1)
public string ConvertLink(string input)
{
//Add http:// to link url
Regex urlRx = new Regex(@"(?<url>(http(s?):[/][/]|www.)([a-z]|[A-Z]|[0-9]|[/.]|[~])*)", RegexOptions.IgnoreCase);
MatchCollection matches = urlRx.Matches(input);
foreach (Match match in matches)
{
string url = match.Groups["url"].Value;
Uri uri = new UriBuilder(url).Uri;
input = input.Replace(url, uri.AbsoluteUri);
}
return input;
}
代码使用regex定位字符串中的每个链接,然后使用UriBuilder将链接添加到链接(如果不存在)。由于“http://”是默认值,因此如果不存在协议,则会添加它。
答案 2 :(得分:0)
在此链接中,您可以举例说明如何获取URL的域名,使用此链接,您可以将第二部分添加到URL的字符串
http://www.jonasjohn.de/snippets/csharp/extract-domain-name-from-url.htm
我认为这是最好的方法。
见。
答案 3 :(得分:0)
怎么样:
string GetUrl(string actual, string path)
{
return actual.Substring(0, actual.Length - 4).ToString() + "/" + path;
}