Problem
我可以使用以下命令成功地从该关系的任一端获取相关项目:
-
http://localhost/api/练习(1) http://localhost/api/Exercises(1)?$expand=测量值
- http://localhost:49540/api/Exercises(1)/Measurements http://localhost:49540/api/Exercises(1)/Measurements
现在我正在努力处理他们之间的关系。我发现了一些我尝试过的例子,但没有一个起作用。这是一个 http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/ODataServiceSample/ODataService/Controllers/ProductFamiliesController.cs and 这是另一个 https://github.com/OData/ODataSamples/blob/2c4c8738d097e993822ec9ca5088d224979ab430/WebApi/v4/ODataQueryableSample/Controllers/CustomersController.cs.
Models
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; }
}
Actions
以下是我尝试过的行动以及他们的要求:
[HttpDelete]
public IHttpActionResult DeleteRef([FromODataUri] int key, [FromODataUri] string relatedKey, string navigationProperty)
{
return StatusCode(HttpStatusCode.NoContent);
}
URL: http://localhost/api/Exercises(1)/Measurements http://localhost/api/Exercises(1)/Measurements$id=http://localhost/api/Measurements(4) 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: n/a
结果:服务器错误: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})'.
Related
This guy http://forums.asp.net/t/2010431.aspx?Delete%20OData%20Reference有相同的症状,并在微软发布修复程序后得以解决。我正在使用最新版本的 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" />