C# 将网址转换为有效的href值

C# 将网址转换为有效的href值,c#,asp.net,.net,asp.net-mvc-3,url,C#,Asp.net,.net,Asp.net Mvc 3,Url,首先,这似乎是以前应该问的问题,但我找不到任何答案 我的任务的基本概述是在基于用户定义的web地址的网页上呈现锚定链接。由于地址由用户定义,因此可以采用任何格式,例如: www.example.com example.com 我需要使用该值将其设置为锚定标记的href属性。现在,问题是(至少在Chrome中)只有前两个示例可以工作,因为它们被认为是绝对URL路径。最后两个示例将重定向到同一个域(即被视为相对路径) 因此,最终的问题是:格式化这些值以确保使用一致的绝对路径的最佳方式是什么?

首先,这似乎是以前应该问的问题,但我找不到任何答案

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

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

因此,最终的问题是:格式化这些值以确保使用一致的绝对路径的最佳方式是什么?我可以检查http/https,如果丢失了就添加它,但我希望有一个现成的.Net类更可靠


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

几个月前我们遇到了这个问题,需要一种一致的方法来确保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://
。如果Microsoft要在框架中构建类似的内容,那么从一开始就存在问题。

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

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

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

此构造函数假定字符串参数引用绝对URI,相当于调用UriKind设置为绝对的URI构造函数。如果传递给构造函数的字符串参数是相对URI,则此构造函数将引发UriFormatException


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

是否有理由在第一个
if
中使用按位OR而不是逻辑OR?有关差异的解释,请参阅。@DanielHilgarth我已更新了答案。最初的脚本是用VB.NET编写的,所以我在c#中发布了它作为OP,但错过了。感谢您的建议,看起来我可能不得不选择手动实现(至少现在是这样),但是
https
部分对我来说不是问题。对于那些类型的站点,我希望用户已经明确地包含了https部分,谢谢你的建议,但是在尝试之后,它只适用于前两个示例。最后两个示例将引发异常。因此,这对我的需要不起作用,你应该尝试两种答案的组合。对于另一个答案,您满足了拥有http的必要条件。对于第二个,您将验证URL的其余部分是否正确。您可以检查用户输入以强制包含http吗?我可以强制输入一个有效的url,但仍然希望在使用之前进行检查(只是为了确保)。现在我将尝试一个自定义函数,看看它是如何使用正则表达式强制实现的。在谷歌中查找“c#regex url检查”。有很多好的样品。