C# - 验证网站 URL。 IsWellFormedUriString 始终返回 true

问题描述 投票:0回答:4

我需要对以下网站网址返回 true 的检查: 我需要确保以 www 开头的网站。视为真实。 google.com 也应该返回 true。

www.google.com

google.com

http://google.com

http://www.google.com

https://google.com

https://www.google.com

我一直在使用

IsWellFormedUriString
,但没有取得任何进展。它不断返回 true。我也用过
Uri.TryCreate
,但也无法让它工作。 Stack Overflow 上有很多关于这个主题的内容,但没有一个有效。我一定是做错了什么。

这是我的

ValidateUrl
功能:

   public static bool ValidateUrl(string url)
   {
       try
       {
           if (url.Substring(0, 3) != "www." && url.Substring(0, 4) != "http" && url.Substring(0, 5) != "https")
           {
               url = "http://" + url;
           }
           if (Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute))
           {
               Uri strUri = new Uri(url);
               return true;
           }
           else
           {
               return false;
           }
       }
       catch (Exception exc)
       {
           throw exc;
       }
   }

我这样称呼它:

if (ValidateUrl(url) == false) { 
    validationErrors.Add(new Error() 
    { 
        fieldName = "url", 
        errorDescription = "Url is not in correct format." 
    }); 
}

它返回 true

htp:/google.com
。我知道这个网站上有很多关于这个主题的内容,但昨天我一整天都在努力让它发挥作用,但没有任何效果。

c# asp.net validation webforms
4个回答
3
投票

如果您希望用户从数据库复制并粘贴到浏览器中并输入有效的站点,我认为您应该验证网址格式 同时验证url是否存在 例如:

    Uri.IsWellFormedUriString("http://www.google.com", UriKind.Absolute);   

URL 的正确形式再次是正确的。

    WebRequest request = WebRequest.Create("http://www.google.com");
    try
     {
       request.GetResponse();
     }
   catch (Exception ex)
    {
     throw ex;
   }

如果无法从 url 获取答案,则会返回异常

嗨。


2
投票

如果我理解你的问题正确,那么我会这样检查:

public static bool ValidateUrl(string url)
{
    return url.StartsWith("https://www.") || url.StartsWith("http://www.") || url.StartsWith("https://google.com") || url.StartsWith("http://google.com");
    
}

任何非 google.com 但带有 https://www 的域名。或 http://www.返回 true,否则返回 false。


0
投票

如果你想测试 HTTP(S) url 是否良好,你应该使用这个: (信用:stackoverflow.com/a/56116499/215552

Uri uriResult;
bool result = Uri.TryCreate(uriName, UriKind.Absolute, out uriResult) 
    && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);

所以在你的情况下:

public static boolean ValidateUrl(string url){
    Uri uriResult;
    return Uri.TryCreate(url, UriKind.Absolute, out uriResult) 
        && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);
}

//编辑:试试这个:

public static bool ValidateUrl(string URL)
{
    string Pattern = @"(http(s)?://)?([\w-]+\.)+[\w-]+[\w-]+[\.]+[\][a-z.]{2,3}$+([./?%&=]*)?";
    Regex Rgx = new Regex(Pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
    return Rgx.IsMatch(URL);
}

0
投票

我通过编写一个使用正则表达式来验证 url 的小辅助方法来使其工作。

以下网址的通行证:

google.com

www.google.com

http://google.com

http://www.google.com

https://google.com/test/test

https://www.google.com/test

它失败了:

www.google.com/a bad path with space/

下面是我创建的辅助方法:

    public static bool ValidateUrl(string value, bool required, int minLength, int maxLength)
    {
        value = value.Trim();
        if (required == false && value == "") return true;
        if (required && value == "") return false;

        Regex pattern = new Regex(@"^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$");
        Match match = pattern.Match(value);
        if (match.Success == false) return false;
        return true;
    }

这允许用户输入任何有效的网址,而且它还可以解决带有空格的错误网址路径,这正是我所需要的。

© www.soinside.com 2019 - 2024. All rights reserved.