我正在尝试实现.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", .... .... .... }
答案 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();
}