C# 如何在POST/PUT OData请求上扩展导航属性
我正在使用OData ASP.NET Core 7.4.1 例如,使用请求C# 如何在POST/PUT OData请求上扩展导航属性,c#,asp.net-core,odata,asp.net-core-3.1,C#,Asp.net Core,Odata,Asp.net Core 3.1,我正在使用OData ASP.NET Core 7.4.1 例如,使用请求GEThttps://localhost:44346/api/v1/estates/74EEAB44-B8E7-EA11-B361-D43B04C15376?$expand=租户,我可以获得一个包含租户信息的实体 { "@odata.context": "https://localhost:44346/odata/v1/$metadata#Estates(tenants(),tenan
GEThttps://localhost:44346/api/v1/estates/74EEAB44-B8E7-EA11-B361-D43B04C15376?$expand=租户
,我可以获得一个包含租户信息的实体
{
"@odata.context": "https://localhost:44346/odata/v1/$metadata#Estates(tenants(),tenants())",
"value": [
{
"updatedOn": "2020-08-26T16:22:01.03+02:00",
"tenants": [
{
"name": "tenant"
}
]
}
]
}
{
"@odata.context": "https://localhost:44346/odata/v1/$metadata#Estates(tenants(),tenants())",
"value": [
{
"updatedOn": "2020-08-26T16:22:01.03+02:00",
"tenants": []
}
]
}
但是使用Put请求Puthttps://localhost:44346/odata/v1/estates(74EEAB44-B8E7-EA11-B361-D43B04C15376)?$expand=租户
,我可以获得返回的实体,但没有租户
{
"@odata.context": "https://localhost:44346/odata/v1/$metadata#Estates(tenants(),tenants())",
"value": [
{
"updatedOn": "2020-08-26T16:22:01.03+02:00",
"tenants": [
{
"name": "tenant"
}
]
}
]
}
{
"@odata.context": "https://localhost:44346/odata/v1/$metadata#Estates(tenants(),tenants())",
"value": [
{
"updatedOn": "2020-08-26T16:22:01.03+02:00",
"tenants": []
}
]
}
问题:如何在PUT
请求中返回返回的实体的tenants
,因为我不想向服务器发出GET(id)
调用来刷新创建/更新的实体。服务器应该返回与GET(id)
完全相同的实体表示形式
关于这一点,有一个公开的解决方案,但没有解决。有人解决了这个问题?这是Startup.cs中的设置
app.UseMvc(routeBuilder =>
{
routeBuilder.EnableDependencyInjection();
routeBuilder.Select().Expand().Filter().OrderBy().MaxTop(10).Count();
var builder = new ODataConventionModelBuilder(app.ApplicationServices);
builder.EntitySet<Tenants>("estates");
routeBuilder.MapODataServiceRoute("ODataRoute", "odata/v1", builder.GetEdmModel());
});
app.UseMvc(routeBuilder=>
{
routeBuilder.EnableDependencyInjection();
routeBuilder.Select().Expand().Filter().OrderBy().MaxTop(10.Count();
var builder=新的ODataConventionModelBuilder(应用程序服务);
建筑商实体集(“地产”);
routeBuilder.MapODataServiceRoute(“ODataRoute”,“odata/v1”,builder.getedModel());
});
模式代码
public class Tenants
{
public int id { get; set; }
public DateTime updatedOn { get; set; }
public List<Tenant> tenants { get; set; }
}
public class Tenant
{
public string name { get; set; }
}
公共类租户
{
公共int id{get;set;}
public DateTime updatedOn{get;set;}
公共列表租户{get;set;}
}
公屋租户
{
公共字符串名称{get;set;}
}
HTTP获取
[HttpGet]
[启用查询(AllowedQueryOptions=AllowedQueryOptions.All)]
公共异步任务Get()
{
var tenants=(wait dataProvider.GetTenants()).ToList();
返回Ok(租户);
}
HTTP PUT
[HttpPut(“{key}”)]
[ODataRoute(“{key}”)]
[启用查询]
公共异步任务([FromODataUri]Guid键,[FromBody]Estate)
{
var tenants=(wait dataProvider.SetTenants(name)).ToList();
返回Ok(租户);
}
嗨,@Antoine V,HttpPut在我的Odata上工作。你可以分享你的HTTP PUT方法吗?是的,你需要分享你处理PUT的控制器方法,你在该方法中使用的响应机制决定了响应如何以及是否与
租户
导航数据序列化。我编辑了你的帖子,但你的想法帮助我使代码工作