c# - 如何使用 ServerManager 检查元数据是否存在?

标签 c# .net servermanager

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

最佳答案

我试图在反汇编工具中挖掘它一点。它在内部使用 Microsoft.Web.Administration.Interop 程序集而不是 native API(正如您已经猜到的那样,这就是存在 COMException 的原因)。 IAppHostElement 中描述了使用元数据的方法界面。

来自它的 GetMetadata 方法的描述:

Return value:
S_OK: Indicates that the operation was successful.
ERROR_NOT_SUPPORTED: Indicates that the requested metadata is not recognized.

如您所见,没有检查元数据是否存在的方法,并且在返回结果不是S_OK 的任何情况下互操作都会抛出异常。所以不幸的是,我想如果不调用 GetMatadata 方法并捕获异常,就无法知道特定元数据的存在。

关于c# - 如何使用 ServerManager 检查元数据是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25211389/

相关文章:

c# - ServerManager CommitChanges 稍有延迟地进行更改

c# - 如何以编程方式使用服务器管理器允许 IIS 管理器用户访问 IIS 站点

c# - wpf绑定(bind)命令到窗口的快捷方式

c# - 最上面的表格,点击 "through"可能吗?

不同限界上下文聚合根之间通信的.net实现

.net - 隐藏变量

c# - 在 C# 中返回 'this' 的数组

c# - 检查 List<string> 是否包含指定以外的任何值

c# - 使用 new 创建时命名 ValueTuple 属性

python-3.x - 使用 python 控制 minecraft 服务器