3

首先,这似乎是以前应该问过的问题,但我找不到任何可以回答我的问题的东西。

我的任务的基本概述是在基于用户定义的网址的网页上呈现锚链接。由于地址是用户定义的,因此可以是任何格式,例如:

我需要对这个值做的是将它设置为href锚标记的属性。现在,问题是(至少在 Chrome 中)只有前两个示例可以工作,因为它们被识别为绝对 URL 路径。最后两个示例将重定向到同一个域(即视为相对路径)

所以最终的问题是:格式化这些值以确保使用一致的绝对路径的最佳方法是什么?我可以检查 http/https 并在丢失时添加它,但我希望可能有一个开箱即用的 .Net 类,它会更可靠。

此外,由于这是一个用户定义的值,它可能是完全的垃圾,所以验证 URL 的功能也将是一个不错的奖励。

4

2 回答 2

1

几个月前我们遇到了这个问题,需要一种一致的方法来确保 URL 是绝对的。我们还想要一种删除http(s)://在网页上显示 URL 的方法。

我想出了这个功能:

public static string FormatUrl(string Url, bool IncludeHttp = null)
{

    Url = Url.ToLower();

    switch (IncludeHttp) {
        case true:
            if (!(Url.StartsWith("http://") || Url.StartsWith("https://")))
                Url = "http://" + Url;
            break;
        case false:
            if (Url.StartsWith("http://"))
                Url = Url.Remove(0, "http://".Length);
            if (Url.StartsWith("https://"))
                Url = Url.Remove(0, "https://".Length);
            break;
    }

    return Url;

}

我知道您正在寻找“开箱即用”的库,但这可能会有所帮助。

我认为“开箱即用”解决方案的问题在于该函数不知道 URL 是否应该http://https://. 使用我的功能,我假设它会是http://,但对于某些 URL,您需要https://。如果微软要在框架中构建这样的东西,它从一开始就是错误的。

于 2012-04-18T10:13:01.693 回答
0

您可以尝试使用 Uri 类的这个重载:

Uri 构造函数(字符串)

此构造函数从 URI 字符串创建一个 Uri 实例。它解析 URI,将其置于规范格式,并进行任何所需的转义编码。

此构造函数不确保 Uri 引用可访问的资源。

此构造函数假定字符串参数引用绝对 URI,并且等效于调用 Uri 构造函数并将 UriKind 设置为 Absolute。如果传递给构造函数的字符串参数是相对 URI,则此构造函数将抛出 UriFormatException。

这将尝试从用户输入构造一个规范的 Uri。而且您有很多属性可以检查和提取您需要的 URL 部分。

于 2012-04-18T10:14:51.447 回答