在 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# 程序员来说都是微不足道的,但并不接近"最短的方法"。它没有任何问题,但我的问题是看看有什么更好的方法可以做到这一点。
你可以为此使用UriBuilder
类。
public static Uri GetUri(this string s)
{
return new UriBuilder(s).Uri;
}
此构造函数初始化 UriBuilder 类的新实例,其中的片段、主机、路径、端口、查询、方案和 Uri 属性设置为在 uri 中指定。
如果 uri 未指定方案,则方案默认为"http:"。
这是进入 html a 标签的 href,因此需要包含协议以避免地址被视为相对地址
您可以简单地使用 //
让浏览器知道它是一个绝对 url 而不是相对路径,然后浏览器将适当地使用 http
或https
(基于当前页面上下文(。
例如:
//www.google.com/
假设只有http/https协议是预期的:
if (!url.StartsWith("https://", StringComparison.OrdinalIgnoreCase)
&& !url.StartsWith("http://", StringComparison.OrdinalIgnoreCase))
url = "http://" + url;