2

我使用以下代码通过 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”。在尝试检索密钥之前,如何检查密钥是否存在?如果可能的话,我想避免尝试捕获。

4

1 回答 1

1

我试图在拆卸工具中挖掘它。在内部,它在本地 API 上使用 Microsoft.Web.Administration.Interop 程序集(正如您已经猜到的,这就是出现 COMException 的原因)。IAppHostElement接口中描述了使用元数据的方法。

从它的 GetMetadata 方法的描述:

返回值:
S_OK:表示操作成功。
ERROR_NOT_SUPPORTED:表示请求的元数据未被识别。

如您所见,没有方法检查元数据是否存在,并且当返回结果为 not 时,interop 无论如何都会抛出异常S_OK。所以不幸的是,我想如果不调用 GetMatadata 方法并捕获异常,就无法知道特定元数据的存在。

于 2014-08-09T07:54:29.880 回答