gpt4 book ai didi

asp.net-web-api - 将任意数据添加到 WebAPI 中的 OData 元数据?

转载 作者:行者123 更新时间:2023-12-04 10:51:44 25 4
gpt4 key购买 nike

我有一个使用 OData ( System.Web.Http.OData , 5.1.0.0) 的简单 WebAPI2 服务。用户可以点击/odata/$metadata获取可用的实体和属性。我正在寻找一种使用附加信息扩展此元数据的方法,例如向属性添加“显示名称”值。

我发现有关“注释”的信息听起来像是我想要的,但我找不到任何解释如何在我的场景中使用它的信息,或者是否有可能。我试图做如下事情:

model.SetAnnotationValue(((IEdmEntityType)m.FindType("My.Thing")).FindProperty("SomeProperty"),
namespaceName:"MyNamespace",
localName: "SomeLocalName",
value: "THINGS");

类型/属性名称正确且调用成功,但 OData EDMX 文档不包含此注释。有什么方法可以公开这些注释或以其他方式做我想做的事吗?

更新 :
还在它。我一直在看 ODataMediaTypeFormatters作为处理此问题的一种可能方式。有一个 ASP.NET sample project这显示了如何向实体添加实例注释。关闭,但不完全是我想要的,所以现在我试图找到一种方法来扩展以类似方式生成元数据文档的任何内容。

最佳答案

我想出了一种方法来做到这一点。下面的代码添加了一个自定义命名空间前缀“myns”,然后在模型属性上添加了一个注释:

const string namespaceName = "http://my.org/schema";
var type = "My.Domain.Person";
const string localName = "MyCustomAttribute";

// this registers a "myns" namespace on the model
model.SetNamespacePrefixMappings(new [] { new KeyValuePair<string, string>("myns", namespaceName), });

// set a simple string as the value of the "MyCustomAttribute" annotation on the "RevisionDate" property
var stringType = EdmCoreModel.Instance.GetString(true);
var value = new EdmStringConstant(stringType, "BUTTONS!!!");
m.SetAnnotationValue(((IEdmEntityType) m.FindType(type)).FindProperty("RevisionDate"),
namespaceName, localName, value);

请求 OData 元数据文档应该给你这样的东西:
<edmx:Edmx Version="1.0">
<edmx:DataServices m:DataServiceVersion="3.0" m:MaxDataServiceVersion="3.0">
<Schema Namespace="My.Domain">
<EntityType Name="Person">
<Key><PropertyRef Name="PersonId"/></Key>
<Property Name="RevisionDate" Type="Edm.Int32" Nullable="false" myns:MyCustomAttribute="BUTTONS!!!"/>
</Schema>
</edmx:DataServices>
</edmx:Edmx>

关于asp.net-web-api - 将任意数据添加到 WebAPI 中的 OData 元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22207249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com