确定是否为绝对或相对URL

Mar*_*ark 57 c# url parsing

我在字符串中有一个相对或绝对的url.我首先需要知道它是绝对的还是相对的.我该怎么做呢?然后我想确定url的域是否在允许列表中.

这是我的允许列表,作为一个例子:

string[] Allowed =
{
   "google.com",
   "yahoo.com",
   "espn.com"
}
Run Code Online (Sandbox Code Playgroud)

一旦我知道它的相对或绝对,我认为它相当简单:

if (Url.IsAbsolute)
{
    if (!Url.Contains("://"))
        Url = "http://" + Url;

    return Allowed.Contains(new Uri(Url).Host);
}
else //Is Relative
{
    return true;
}
Run Code Online (Sandbox Code Playgroud)

Muh*_*han 101

bool IsAbsoluteUrl(string url)
{
    Uri result;
    return Uri.TryCreate(url, UriKind.Absolute, out result);
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用`Uri.TryCreate`方法代替更漂亮的代码. (5认同)
  • 如果存在scheme(http/https/etc),System.Uri只会认为它是绝对的,但浏览器(一般用户代理)将采用与协议相关的'//pirate.ru/'URL相同的方案. (4认同)
  • 要继续@yzorg的评论,你应该确保`url`值不以''//'`开头.如果你使用它来检查有效的重定向,你肯定应该这样做.如果有人知道检测协议相对URL的更好或更强大的方法,我会全神贯注. (4认同)
  • @TEK:绝对*路径*,但相对*URI*。 (4认同)
  • 这从 `/dir/example-img.jpg` 返回 true。这是相对路径,对吧? (3认同)

Chr*_*sic 28

出于某种原因,他们的主人删除了几个好的答案:

通过@Chamika Sandamal

Uri.IsWellFormedUriString(url, UriKind.Absolute)
Run Code Online (Sandbox Code Playgroud)

Uri.IsWellFormedUriString(url, UriKind.Relative)
Run Code Online (Sandbox Code Playgroud)

UriParser通过和实施@Marcelo托斯