CheckSchemeName在带有多个前缀的网址上失败

时间:2019-01-11 15:05:52

标签: c#

我有以下网址:turnerstadium.co.il,我正在尝试检查scheme是否正确,所以我这样做了:

if (!Uri.CheckSchemeName(link))
{
   link = "http://" + link;
}

问题是CheckSchemeName返回true,所以当我这样做时:

var url = new Uri(link);

我得到:

  

无效的URI:无法确定URI的格式

我该如何解决?

2 个答案:

答案 0 :(得分:0)

这是CheckSchemeName方法的代码。

public static bool CheckSchemeName(string schemeName)
{
  if (schemeName == null || schemeName.Length == 0 || !Uri.IsAsciiLetter(schemeName[0]))
    return false;
  for (int index = schemeName.Length - 1; index > 0; --index)
  {
    if (!Uri.IsAsciiLetterOrDigit(schemeName[index]) && schemeName[index] != '+' && (schemeName[index] != '-' && schemeName[index] != '.'))
      return false;
  }
  return true;
}

来自Uri.CheckSchemeName的备注部分:

  

方案名称必须以字母开头,并且只能包含   字母,数字和字符“。”,“ +”或“-”。

因此,如您所见,此方法仅检查您传递的字符串是否满足这些要求。

如果您只想检查字符串是否以“ http://”开头,并在不存在的情况下附加该字符串,则可能的解决方案之一是:

  if (!link.StartsWith("http://"))
  {
    link = "http://" + link;
  }

否则,我建议阅读this

答案 1 :(得分:-1)

在以下位置检查UriBuilder:https://docs.microsoft.com/en-us/dotnet/api/system.uribuilder?view=netframework-4.7.2

如果不存在该方案,则可以使用构造函数来添加该方案。

var url = new UriBuilder("siteUrl.com").Uri.ToString();

这将返回“ http://siteUrl.com