Asp.net web api 将InstanceAnnotation转换为OData响应

Asp.net web api 将InstanceAnnotation转换为OData响应,asp.net-web-api,odata,Asp.net Web Api,Odata,我定义了以下自己的提供者: public class CustomEntityTypeSerializer : ODataEntityTypeSerializer { public CustomEntityTypeSerializer(ODataSerializerProvider serializerProvider) : base(serializerProvider) {} public override Microsoft.OData.Core.

我定义了以下自己的提供者:

public class CustomEntityTypeSerializer : ODataEntityTypeSerializer
{
    public CustomEntityTypeSerializer(ODataSerializerProvider serializerProvider)
        : base(serializerProvider)
    {}

    public override Microsoft.OData.Core.ODataEntry CreateEntry(SelectExpandNode selectExpandNode, EntityInstanceContext entityInstanceContext)
    {
        Microsoft.OData.Core.ODataEntry entry = base.CreateEntry(selectExpandNode, entityInstanceContext);

        entry.InstanceAnnotations.Add(new ODataInstanceAnnotation("org.test", new ODataPrimitiveValue("test")));
        return entry;
    }

}
我无法从我的webapi应用程序的http响应中获取上面的实例注释。 为什么会发生这种情况


ps:我使用aspnetwebstack.codeplex.com最新版本的master branch中的System.Web.OData lib。接受带有odata的标头。metadata=full是启用的

您可以检查响应标头是否包含:

Preference-Applied: odata.include-annotations="*"
如果没有,请尝试在请求标头中传递以下首选标头。让服务处理这个头并返回带有上述首选项应用头的响应

Prefer: odata.include-annotations="*"

ODL编写器应该使用odata.include-annotations的设置在Preference Applied header中编写实例注释

我已经尝试了odata.include annotations=“*”和odata.include annotations=*值作为Preference header,但没有效果。响应标头也没有应用首选项标头。好的,这意味着服务不会自动处理首选项标头。您有权在web api服务中设置响应头吗?除非在响应标头中设置preference applied标头(无论您或服务如何),否则不会写入实例注释…我已在解决方案中定义了自定义EnableQuery属性,并在OnActionExecuted事件的响应(来自actionContext)中引入preference applied标头。我也确信调用会涉及重写的方法。但我并没有收到预期的结果:在响应中,标题已经出现,但对响应体没有影响。你们还有其他人知道吗?:)