BreezeJS/WebApi OData 最小元数据

BreezeJS/WebApi OData minimal metadata

我有一个正在使用 BreezeJS 查询的 WebApi OData 端点,但我遇到了 json 有效负载的问题。当我使用 BreezeJS 查询端点时,与通过 url 直接查询端点相反,json 有效负载是 ~2x,这似乎是因为响应包含完整的元数据。

示例,使用 Breeze 查询:

{
        "Entity": {
            "Id": 3,
            "LegacyId": 21,
            "Type": "Company",
            "odata.id": "http://localhost/odata/Entities(3)",
            "odata.type": "Test.Models.Entity"
        },
        "Entity@odata.navigationLinkUrl": "http://localhost/odata/Answers(2)/Entity",
        "Question": {
            "Id": 1,
            "Name": "Name",
            "Type": "string",
            "odata.id": "http://localhost/odata/Questions(1)",
            "odata.type": "Test.Models.Question"
        },
        "Question@odata.navigationLinkUrl": "http://localhost/odata/Answers(2)/Question",
        "EntityId": 3,
        "Id": 2,
        "Modified": "2015-05-22T14:56:26.477",
        "Modified@odata.type": "Edm.DateTime",
        "QuestionId": 1,
        "Value": "Some Company Name",
        "odata.id": "http://localhost/odata/Answers(2)",
        "odata.type": "Test.Models.Answer"
    }

对比查询http://localhost/odata/Answers(3)

{
        "Entity": {
            "Id": 3,
            "LegacyId": 21,
            "Type": "Company"
        },
        "Question": {
            "Id": 1,
            "Name": "Name",
            "Type": "string"
        },
        "EntityId": 3,
        "Id": 2,
        "Modified": "2015-05-22T14:56:26.477",
        "QuestionId": 1,
        "Value": "Some Company Name"
    }

有什么方法可以通过 BreezeJS 查询 return 最小元数据吗?

Breeze 控制器公开更多元数据以允许 breeze 客户端执行高级操作,例如根据服务器端数据注释自动进行客户端验证。这就是为什么 Breeze 控制器返回的元数据需要比 OData 端点返回的元数据丰富得多。

如果您不需要客户端的额外功能,您可以让您的 Breeze 应用程序使用简单的 OData 端点,而不是高级 Breeze 端点。 IE。不要在服务器端实现 Breeze 控制器,并将您的 breeze EntityManager 直接指向 OData 端点。

这是docs for consuming an OData endpoint directly from Breeze, without a Breeze controller

你可以像这样在请求头的accept属性中简单提及

var oldClient = odatajs.oData.defaultHttpClient;            
        var myClient = {
            request: function (request, success, error) {
                //request.headers.Accept = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8';
                var oHeaders = {
                    'Accept': 'text/html,application/xhtml+xml,application/xml,application/json;odata.metadata=minimal',                        
                };
                request.headers = oHeaders;
                return oldClient.request(request, success, error);
            }
        };

        odatajs.oData.defaultHttpClient = myClient;