2009-09-16 20 views
3

有没有更好的方式来验证C#字符串是否是比以下有效的xs:anyURI?将C#字符串验证为有效的XML模式anyURI

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

这个构造函数似乎不会抛出任何类型的异常。任何有效的字符串在技术上都是有效的anyURI?

回答

7

看看带有Reflector的SoapAnyUri构造函数,它根本不执行任何验证。

anyURI数据类型is defined as follows

[定义:]任何URI表示的统一资源标识符引用(URI)。 anyURI值可以是绝对的或相对的,并且可以具有可选的片段标识符(即,它可以是URI引用)。应该使用这种类型来指定值由[RFC 2732]修订的[RFC 2396]定义的符合URI角色的意图。

所以,你可以简单地使用Uri.TryCreateUriKind.RelativeOrAbsolute验证字符串代表有效值:

Uri uri; 
bool valid = Uri.TryCreate(anyUriValue, UriKind.RelativeOrAbsolute, out uri);