检查 C# 字符串是否格式正确 url 带有端口号

Check if a C# string is a well formed url with a port number

我得到一个字符串,我检查它是否代表 URL,如下所示:

if(Uri.IsWellFormedUriString(urlString, UriKind.Absolute)) ...

是否还有一种方法可以添加检查 url 是否包含端口号?

public class WhosebugQuestion
{
    public string Run() {
        string urlString = "http://mywebsite:8001/application/api";
        if (Uri.IsWellFormedUriString(urlString, UriKind.Absolute) && urlString.IncludesPort())
            return "The uri contains explicitly defined port";
        return "";
    }
}

public static class Extensions { 
    public static bool IncludesPort(this string urlAddress)
    {
        urlAddress = urlAddress.Replace("http://", "").Replace("https://", "");
        var splitted = urlAddress.Split(':');
        var port = splitted?[1].Split("/")?[0];
        return port != null && int.TryParse(port, out _);
    }
}

您可以将所有繁重的工作卸载给 Uri 构造函数:

var uri = new Uri(urlString);

那么你只需要解读uri.Authority。如果它包含冒号,则指定端口。

public static bool IncludesPort(this string urlAddress)
{
    return new Uri(urlAddress).Authority.Contains(':');
}