WCF Odata - 禁用元数据 ($metadata)



我有一个 c# 应用程序,它自承载 OData WCF 数据服务。

主机的类型为 DataServiceHost 并且以编程方式在代码中配置,而不是使用配置文件。

与该服务的连接是通过使用 SSL 和基本身份验证的 webHttpBinding 进行的。我的服务侦听端口 1234。

当客户端浏览到 https://localhost:1234$metadata 时,它们可以访问服务的 xml 元数据。

我想阻止访问元数据,但无法弄清楚如何禁用它?

有谁知道如何在上述情况下禁用对$metadata的访问?

我终于找到了一种方法......

// Disable mex ($metadata)
ServiceMetadataBehavior smb = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (smb == null)
{
    smb = new ServiceMetadataBehavior();
    smb.HttpsGetEnabled = false;
}
host.Description.Behaviors.Add(smb);
host.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, 
                MetadataExchangeBindings.CreateMexHttpsBinding(),
                "$metadata");

我多次尝试设置服务元数据行为,但没有效果。使HttpsGetEnabled = false生效的诀窍是创建名为"$metadata"的元数据终结点。

如果不创建 mex 终结点,则 DataServiceHost 似乎仅使用自己的元数据终结点,而忽略您的行为设置。

相关内容

最新更新