odata输出中缺少@ odata.context,无法获得excel

时间:2018-02-22 03:12:54

标签: c# excel asp.net-core odata

我正在尝试实现.net核心OData接口。

我已经在其中实现了两个控制器(ODataAsset和ODataAssetCost)。我能够在excel中获取ODataAssetCost的数据,但无法在excel中获取ODataAsset的数据。我可以在POstmana和Chrome中获取这两个数据。

到目前为止我能够弄清楚的是ODataAsset的数据不是OData格式。 @ odata.contex在这里错过了。(以下示例)

[     {         " name":" ASDFG",         "启用":false,         "输入":" ZXCV", .... .... .... ....      } ]

Wheeras我在ODataAssetCost的输出中得到@ odata.context,如下所示:

{     " @ odata.context":" https://localhost:44308/OData/ $ metadata#Edm.String", .... .... .... }

ODataAssetController

ODataAssetCostController

2 个答案:

答案 0 :(得分:0)

返回IEdmModel的方法中的模型(其中包含构建器的模型)可能与您在控制器中用作返回值的模型不同。因此,数据库的结果只是被序列化为普通的json对象。

EdmModel:

   public static IEdmModel GetEdmModel(IServiceProvider serviceProvider)
    {
        ODataConventionModelBuilder builder = new DataConventionModelBuilder(serviceProvider);
        builder.EntitySet<YourModel>("YourModels")
        .EntityType

        return builder.GetEdmModel();
    }
}

控制器:

    [EnableQuery]
    public IActionResult Get()
    {
        // the type of _db.YourModel is not of type YourModel in the Edm model
        return Ok(_db.YourModel);
    }

在我的情况下,这是由于模型是在具有相同名称的不同名称空间中定义的,并且在edm模型中使用一个名称空间,在控制器中使用另一个名称空间。

答案 1 :(得分:0)

您需要将两个模型都添加到Edm模型中。

    private static IEdmModel GetEdmModel()
    {
        var odataBuilder = new ODataConventionModelBuilder();
        odataBuilder.EntitySet<ODataAsset>("ODataAsset");
        odataBuilder.EntitySet<ODataAssetCost>("ODataAssetCost");
        return odataBuilder.GetEdmModel();
    }