总有Uri
类的GetLeftPart
方法可以帮助这里。
GetLeftPart Method
的GetLeftPart方法需要一个枚举从UriPartial系统枚举,其中之一(UriPartial.Authority
)将返回:的 的URI
的方案和权威段。
这有效地消除可能在原始字符串的任何外来的路径信息,并通常会返回一个零长度字符串如果URI供给不包含有效的scheme(即,HTTP或HTTPS等的部件Uri)和/或权威(例如在你的例子中,这是Uri的newhost
部分)。
从这里,您应该能够将呼叫的返回值与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/真
http://newhost:800真
newhost:800假
newhost:Fal SE
QWERTY:newhost假
QWERTY:// newhost真
QWERTY:// newhost:800真
http://newhost/path/to/service假
这似乎是你以后在做什么!
注意的URI像qwerty://newhost
仍然验证为True
的QWERTY 可能您的系统上注册的有效协议。如果您只想要允许http
和/或https
,那么添加此项应该是微不足道的。