Здесь всегда может помочь метод GetLeftPart
класса Uri
.
Метод GetLeftPart
Метод GetLeftPart берет перечисление из системного перечисления UriPartial , одно из которых (UriPartial.Authority
) вернет:
Схема и полномочия сегментов
URI.
Это эффективно удаляет любую постороннюю информацию о пути, которая может быть в исходной строке, и обычно возвращает строку нулевой длины, если предоставленный Uri не содержит действительной схемы (то есть http или https и т. Д. . части Uri) и / или авторитет (т.е. в вашем примере это newhost
часть Uri).
Отсюда вы сможете сравнить возвращаемое значение вызова с GetLLeftPart
с исходной строкой Uri, и если они различаются, Uri является «недействительным». Если они одинаковые, Uri является «действительным» (для ваших целей).
Вот простой пример класса, который будет выполнять эту «проверку», возвращая True или False для Uri (версии C # и VB.NET):
C #
public static class UriValidator
{
public static bool IsUriValid(string uri)
{
try
{
string original_uri = uri;
if (uri.Substring(uri.Length - 1, 1) == "/")
{
original_uri = uri.Substring(0, uri.Length - 1);
}
Uri myUri = new Uri(original_uri);
string new_uri = myUri.GetLeftPart(UriPartial.Authority);
if (original_uri.ToLower() == new_uri.ToLower())
{
return true;
}
else
{
return false;
}
}
catch
{
return false;
}
}
}
VB.NET
Public Class UriValidator
Public Shared Function IsUriValid(ByVal uri As String) As Boolean
Try
Dim original_uri = uri
If uri.Substring(uri.Length - 1, 1) = "/" Then
original_uri = uri.Substring(0, uri.Length - 1)
End If
Dim myUri As Uri = New Uri(original_uri)
Dim new_uri As String = myUri.GetLeftPart(UriPartial.Authority)
If original_uri.ToLower = new_uri.ToLower Then
Return True
Else
Return False
End If
Catch ex As Exception
Return False
End Try
End Function
End Class
Я провел простой тест, используя этот класс:
Console.WriteLine("https://newhost/" + " " + UriValidator.IsUriValid("https://newhost/"));
Console.WriteLine("http://newhost:800" + " " + UriValidator.IsUriValid("http://newhost:800"));
Console.WriteLine("newhost:800" + " " + UriValidator.IsUriValid("newhost:800"));
Console.WriteLine("newhost:" + " " + UriValidator.IsUriValid("newhost:"));
Console.WriteLine("qwerty:newhost" + " " + UriValidator.IsUriValid("qwerty:newhost"));
Console.WriteLine("qwerty://newhost" + " " + UriValidator.IsUriValid("qwerty://newhost"));
Console.WriteLine("qwerty://newhost:800" + " " + UriValidator.IsUriValid("qwerty://newhost:800"));
Console.WriteLine("http://newhost/path/to/service" + " " + UriValidator.IsUriValid("http://newhost/path/to/service"));
И это дало следующий вывод:
https://newhost/ True
http://newhost:800 True
newhost: 800 False
newhost: False
qwerty: newhost False
qwerty: // newhost True
qwerty: // newhost: 800 True
http://newhost/path/to/service Ложь
что похоже на то, что вы ищете!
Обратите внимание, что Uri, как qwerty://newhost
, по-прежнему проверяется как True
, так как qwerty может быть действительным протоколом, зарегистрированным в вашей системе. Если вы хотите разрешить http
и / или https
, добавить это просто.