C# 如何在POST/PUT OData请求上扩展导航属性

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

我正在使用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(),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的控制器方法,你在该方法中使用的响应机制决定了响应如何以及是否与
租户
导航数据序列化。我编辑了你的帖子,但你的想法帮助我使代码工作