在 c# 中使 Web 地址绝对化的最短方法

本文关键字:方法 绝对化 地址 中使 Web | 更新日期: 2023-09-27 18:33:24

我有一个字符串,里面有一个网址,开头可能包含也可能不包含协议。这是进入 html a 标记的 href,因此需要包含协议以避免地址被视为相对地址。实现此目的的最短代码是什么。需要明确的是,可能的输入和预期输出如下。

字符串 url = "www.google.com";//预期的"http://www.google.com">

字符串 url = "google.com";//预期的"http://google.com">

字符串 url = "http://www.google.com";//预期的"http://www.google.com">

字符串 url = "https://www.google.com";//预期的"https://www.google.com">

更新:

对于那些想知道我已经尝试过的人,这是几个 if 语句,检查 url 是否已经以相关前缀之一开头,然后在必要时附加它。这对任何 c# 程序员来说都是微不足道的,但并不接近"最短的方法"。它没有任何问题,但我的问题是看看有什么更好的方法可以做到这一点。

在 c# 中使 Web 地址绝对化的最短方法

你可以为此使用UriBuilder类。

public static Uri GetUri(this string s)
{
    return new UriBuilder(s).Uri;
}

此构造函数初始化 UriBuilder 类的新实例,其中的片段、主机、路径、端口、查询、方案和 Uri 属性设置为在 uri 中指定。

如果 uri 未指定方案,则方案默认为"http:"。

这是进入 html a 标签的 href,因此需要包含协议以避免地址被视为相对地址

您可以简单地使用 // 让浏览器知道它是一个绝对 url 而不是相对路径,然后浏览器将适当地使用 httphttps(基于当前页面上下文(。

例如:

//www.google.com/

假设只有http/https协议是预期的:

if (!url.StartsWith("https://", StringComparison.OrdinalIgnoreCase) 
       && !url.StartsWith("http://", StringComparison.OrdinalIgnoreCase))
    url = "http://" + url;