Web Api oData v4$ref 404或服务器错误
本文关键字:服务器 错误 ref Api oData v4 Web | 更新日期: 2024-09-21 03:07:05
问题
我能够使用以下方法成功地从这段关系的任何一端获取相关项目:
- http://localhost/api/Exercises(1) $expand=测量
- http://localhost:49540/api/Exercises(1)/测量
现在我正在努力处理他们之间的关系。我在那里发现了一些我尝试过的例子,但都不起作用。这是一个,这是另一个。
型号
public class Exercise
{
public int Id { get; set; }
public virtual ICollection<Measurement> Measurements { get; set; }
}
public class Measurement
{
public int Id { get; set; }
public virtual ICollection<Exercise> Exercises { get; set; }
}
操作
以下是我尝试过的操作和他们的请求:
[HttpDelete]
public IHttpActionResult DeleteRef([FromODataUri] int key, [FromODataUri] string relatedKey, string navigationProperty)
{
return StatusCode(HttpStatusCode.NoContent);
}
网址:http://localhost/api/Exercises(1)/测量$id=http://localhost/api/Measurements(4)
结果:404
[HttpDelete]
[ODataRoute("Exercises({key})/Measurements({relatedKey})/$ref")]
public IHttpActionResult DeleteMeasurementFromExercise(int key, int relatedKey)
{
return StatusCode(HttpStatusCode.NoContent);
}
URL:无
结果:服务器错误:The path template 'Exercises({key})/Measurements({relatedKey})/$ref' on the action 'DeleteMeasurementFromExercise' in controller 'Exercises' is not a valid OData path template. The URI segment '$ref' is invalid after the segment 'Measurements({relatedKey})'.
相关
这家伙也有同样的症状,在微软发布修复程序后,他得以解决。我正在使用Web API和oData的最新版本运行,但仍然存在此问题。
<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.AspNet.OData" version="5.9.0" targetFramework="net46" />
<package id="Microsoft.OData.Core" version="6.15.0" targetFramework="net46" />
<package id="Microsoft.OData.Edm" version="6.15.0" targetFramework="net46" />
像往常一样,在向SO发布问题几分钟后,我就会找到我坚持了好几天的问题的答案。
根据本文档底部的删除实体之间的关系,我的URL应该如下所示:
DELETE http://host/Suppliers(1)/Products/$ref?$id=http://host/Products(1)
对于这样的动作:
public IHttpActionResult DeleteRef([FromODataUri] int key, [FromODataUri] string relatedKey, string navigationProperty)
{
return StatusCode(HttpStatusCode.NoContent);
}
文档错误。经过一番挖掘,我发现你的网址应该是这样的:
DELETE http://host/Suppliers(1)/Products(2)/$ref
我痛苦地发现,早些时候要解决这个问题的另一件事是查看从全局发现URL检索到的实体元数据文件。它将包括关系两端的两个实体,以及多对多关系的任何联接表。这将为您提供用于每个对象的有效名称。
MS需要认真修复和改善CDS的用户体验,或者干脆放弃Fing的东西。十多年来,这一直是一场愚蠢的噩梦。