0

我有一个带有网址的字符串,其中可能包含也可能不包含开头的协议。这将进入 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# 程序员来说都是微不足道的,但并不接近“最短路径”。它没有任何问题,但我的问题是看看有什么更好的方法来做到这一点。

4

3 回答 3

5

您可以UriBuilder为此使用类。

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

此构造函数使用在 uri 中指定的 Fragment、Host、Path、Port、Query、Scheme 和 Uri 属性设置初始化 UriBuilder 类的新实例。

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

于 2013-10-01T15:35:12.840 回答
2

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

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

例如:

//www.google.com/
于 2013-10-01T15:35:38.427 回答
0

假设只需要 http/https 协议:

if (!url.StartsWith("https://", StringComparison.OrdinalIgnoreCase) 
       && !url.StartsWith("http://", StringComparison.OrdinalIgnoreCase))
    url = "http://" + url;
于 2013-10-01T15:35:55.803 回答