剥离URL的前缀

时间:2015-01-26 22:27:31

标签: c# uri

我有以下URL字符串日志。这些日志包含数百万条记录。

www.example.com/p1?q=k
example.com/p1?q=k
http://example.com/p1?q=k
https://example.com/p1?q=k
http://www.example.com/p1?q=k

我使用了C#Uri类,但它对“example.com/p1?q=K”类型的格式抛出了异常 我想知道是否有一个通用的/标准的可接受的方法来处理这些不同类型的URL以获得websitename&相对URL。

P.S:我可以剥掉http://& https://使用正则表达式或字符串比较,但很想知道是否有任何优雅的解决方案

2 个答案:

答案 0 :(得分:1)

如果您尝试使用现有示例,它将无法工作..但是您可以使用它并在需要时执行一些附加代码,这意味着您需要创建一些变量来存储http://, https://, and www. < / p>

System.Uri uriPre = new Uri ("http://www.example.com/p1?q=k"); 
string uriString = uriPre.Host + uriPre.PathAndQuery;
uriString = uriString.Replace("www.", "");

产量

"example.com/p1?q=k"
  • 您需要弄清楚其余的编码,因为根据我提供的示例,只有您知道何时使用不同的协议

展开Alexei Levenkov这里的答案是一个可以用来尝试创建新Uri的示例。

Uri tempValue;
var uriPre = new Uri(string.Empty, UriKind.Relative);
if (Uri.TryCreate("example.com/p1?q=k", UriKind.Relative, out tempValue))
{
    // do something or retrun tempValue;
}

答案 1 :(得分:0)

Uri它是专门用来处理Uris的类

var noSchemaRelativeUri = new Uri("example.com/foo", UriKind.Relative);

UriBuilderUri(Uri base, Uri relative)可用于构造绝对Uri。

要在亲戚和aboslute之间进行选择,您可以使用Uri.TryCreate

请注意。严格来说,“www.example.com”和“example.com”是不相关的域名,不能保证将一个域名转换为另一个域名(也确实大多数站点都注册了这两个域名并在它们之间进行某种重定向)。 / p>