验证C#字符串是否为有效的XML Schema anyURI

gea*_*dan 3 c# parsing xsd

有没有更好的方法来验证C#字符串是否是有效的xs:anyURI而不是以下?

public bool VerifyAnyURI(string anyUriValue)
{ 
    bool result = false;
    try
    {
        SoapAnyUri anyUri = new SoapAnyUri(anyUriValue);
        result = true;
    }
    catch (Exception)
    {
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

此构造函数似乎不会抛出任何类型的异常.从技术上讲,任何有效字符串都是有效的anyURI吗?

dtb*_*dtb 7

SoapAnyUri使用Reflector 查看构造函数,它根本不执行任何验证.

anyURI数据类型被限定如下:

[定义:] anyURI表示统一资源标识符引用(URI).anyURI值可以是绝对值或相对值,并且可以具有可选的片段标识符(即,它可以是URI参考).此类型应用于指定值满足[RFC 2396]定义的URI角色的意图,由[RFC 2732]修订.

因此,您只需使用Uri.TryCreatewith UriKind.RelativeOrAbsolute来验证字符串是否代表有效值:

Uri uri;
bool valid = Uri.TryCreate(anyUriValue, UriKind.RelativeOrAbsolute, out uri);
Run Code Online (Sandbox Code Playgroud)