【问题标题】:strip off prefix of URL's去掉 URL 的前缀
【发布时间】:2015-01-26 22:27:30
【问题描述】:

我有以下 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 以获取网站名称和相对 URL。

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

【问题讨论】:

  • if there is a generally/standard accepted method 是的Uri :)
  • 是的,但它会引发类型为“example.com/p1?q=k”的日志的异常
  • 附加 http://、https:// 或 www。如果它不存在,以防它在 Uri 实例的构造过程中发生
  • 你拥有的不是有效的 uri,如果你想做你正在做的事情,你需要在 uri 中有 http://www. 然后你可以替换删除 www 的代码将它存储为变量然后附加它我将粘贴一些代码供您开始使用..
  • @MethodMan 根据相应的 RFC Uri 不必一直都是绝对的...... OP 展示了几个相对 uri 的样本(即没有模式部分),这些样本完全被 .Net Uri明确指定“相对”作为类型时的类......不知道为什么你认为它们是“无效的”。

标签: c# uri


【解决方案1】:

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

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;
}

【讨论】:

  • 我假设你知道 = new Uri(string.Empty, UriKind.Relative); 完全没用,因为 out...
  • 是的,我知道我只是在展示一个示例,因为我不知道OP 打算在条件检查中做什么。我实际上要发布var uriPre = new Uri(string.Empty, UriKind.Relative); 是没有必要我只是用作示例来表明 tempValue 正在正确返回
【解决方案2】:

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

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

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

要在相对值和绝对值之间进行选择,您可以使用 Uri.TryCreate

注意。严格来说,“www.example.com”和“example.com”是不相关的域名,不能保证将一个域名转换为另一个域名总是产生注册域名(实际上大多数网站同时注册并在两者之间进行某种重定向)。

【讨论】:

  • 我根据您对使用Uri.TryCreate 的建议,更新了我的答案,为OP 提供了一个示例
猜你喜欢
  • 2011-06-20
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
  • 2015-08-18
相关资源
最近更新 更多