我使用以下代码通过Microsoft.Web.Administration.ServerManager获取元数据:
var manager = new ServerManager();
var site = manager.Sites["siteName"];
var metadata = site.GetMetadata("metaKey");
现在,如果" metaKey"如果不存在,GetMetadata将抛出System.Runtime.InteropServices.COMException异常,并显示消息"不支持请求"。如果我首先设置像这样的元数据值
site.SetMetadata("metaKey", "hello")
GetMetadata(" metaKey")不会抛出错误,而是返回值" hello"。在我尝试重新检查之前,如何检查密钥是否存在?如果可能的话,我想避免试试。
答案 0 :(得分:1)
我试图在拆卸工具中稍微挖掘一下。在内部,它使用本机API上的Microsoft.Web.Administration.Interop程序集(正如您已经猜到的那样,这就是为什么存在COMException)。 IAppHostElement interface。
中描述了使用元数据的方法从它的GetMetadata方法的描述:
返回值
S_OK:表示操作成功 ERROR_NOT_SUPPORTED:表示无法识别请求的元数据。
正如您所看到的,没有方法可以检查元数据是否存在,并且当返回结果不是S_OK
时,互操作会抛出异常。所以不幸的是,我猜想在没有调用GetMatadata方法和捕获异常的情况下,无法知道特定元数据是否存在。