Web Api oData v4 $ref 404 或服务器错误

2023-12-19

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" />

像往常一样,在向 SO 发布问题几分钟后,我困扰了几天的问题的答案就出现了。

根据删除实体之间的关系在底部本文档 http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/entity-relations-in-odata-v4,我的网址应该如下所示:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web Api oData v4 $ref 404 或服务器错误 的相关文章

随机推荐

  • reinterpret_cast 为相同类型

    考虑以下程序 struct A int main A a A b a A c reinterpret cast a a 编译器 g 14 抛出一个错误invalid cast from type A to type A 为什么转换为相同类型
  • “请求中的 URI 无效”尝试代理 iframe 内容以进行本地调试

    我正在尝试调试包含 iframe 的页面中的问题 为父页面提供服务的网站是我正在处理的代码 我可以轻松地在本地运行 但 iframe 的内容来自我无权访问的代码 有一些保护措施会阻止跨域 iframe 这在生产中不会成为问题 因为它们将在同
  • 如何在Linux上后台无限运行脚本?

    我有一个带有无限循环的 PHP 脚本 我需要这个脚本永远运行 所以 我跑 php path to script php gt dev null 它在我当前用户的安全上下文中在后台运行 但是当我关闭终端窗口 注销 时 CentOS Linux
  • 从命令行运行 PyCharm 项目

    我正在尝试将我的项目部署到服务器并在那里运行它 当我尝试从命令行启动脚本时 它显示错误 导入父目录中的脚本时 我使用 PyCharm 制作了该项目 python 2 7 10 并将其分散到多个目录中 这些文件夹看起来像这样 项目 dir s
  • 匹配澳大利亚商业号码 (ABN) 的正则表达式

    我需要一个正则表达式来匹配一个值 其中每个字符可以是 0 到 9 之间的数字或空格 该值必须恰好包含 11 位数字 例如 它应匹配格式为 012 345 678 90 或 01234567890 的值 有人可以帮我解决这个问题吗 为了将来可
  • Camunda 使用 REST 获取 XOR 网关的机会

    I have the following situation 我想要做的是在我的 Angular 应用程序中获得一个下拉菜单 其中列出了书籍的所有机会 所以我可以在 哈利 波特 白鲸记 和 鲁宾逊漂流记 之间进行选择 当我选择一本书并按提交
  • 沙盒 AppDomain 中的线程安全

    我有一个应用程序域来托管不受信任的代码 程序集 我用安全属性解决了所有安全问题 效果很好 不受信任的代码在专用线程上运行 CLR 是 2 0 这就是我所拥有的应用程序域Shell http code google com p robocod
  • 在实践中(而非理论上),小批量与实时流有什么区别?

    在实践中 而非理论上 小批量与实时流有什么区别 从理论上讲 我理解迷你批次是在给定时间范围内进行批处理的东西 而实时流更像是在数据到达时执行某些操作 但我最大的问题是为什么不使用带有 epsilon 时间范围 例如一毫秒 的迷你批次或者我想
  • 为什么 Firefox 即使输入不同的名称也会自动完成?

    或者 Firefox 如何确定密码 用户名的去向 如果我更改输入元素的名称 id 标题 类 Firefox 会继续用密码或电子邮件填充它 如果我正确理解 Firefox 的源代码 浏览器首先会在表单中查找密码字段 如果表单包含超过 3 个密
  • 使用 Dropout 时的验证损失

    我试图了解辍学对验证平均绝对误差 非线性回归问题 的影响 无辍学 辍学率为 0 05 With dropout of 0 075 在没有任何 dropout 的情况下 验证损失大于训练损失 如下所示1 https i stack imgur
  • 如何解压缩特定文件夹?

    如何使用 Ant 解压缩特定文件夹 具体来说 我下载了 apache tomcat 6 0 29 zip 其中包含文件夹 apache tomcat 6 0 29 我希望 Ant 解压 apache tomcat 6 0 29 下的所有内容
  • Gitlab CI部署AWS EC2

    我们有一个 lumen 应用程序 我们将项目移动到 GitLab 如果一切正常 我们想拉取该项目 我们添加两个脚本 gitlab ci yml variables All or variables stages test productio
  • airflow postgresql 后端:(psycopg2.OperationalError)致命:用户“airflow”的身份验证失败

    尝试在centos7机器上使用postgresql作为airflow v1 10 5 的后端 在本文之后 https www ryanmerlin com 2019 07 apache airflow installation on ubu
  • 带有 persistence.xml 的 Intellij JPA 控制台

    我正在使用 Intellij 13 设置无 xml 持久性 JPA Hibernate 4 Spring 3 当我尝试在 jpa 控制台中执行查询时 出现以下错误 javax persistence PersistenceException
  • 如何查找是否存在从顶点 x 到顶点 y 且包含边 e 的简单路径

    所以我面临这个问题 我希望有人可以帮助我 给定一个无向的图 G V E 2 个顶点 x y 和一条边 e v u 建议一种算法来查找是否存在简单的路径从 x 到 y 包括边 e 所以这里的重点是简单路径而不是常规路径 对于常规路径来说 使用
  • 在word中设置单个字母的样式

    我目前正在尝试设计 Siteripe 一词的样式 我希望每个字母都有不同的颜色 如本图所示page http www mobile siteripe com我可以使用下面的 CSS 代码行仅设置第一个字母的样式 namer first le
  • 防止 SQL Server 中的缓存

    使用Uncle Google浏览网络后 我找不到这个问题的答案 监视运行 IIS 和 MS SQL Server 2005 的生产服务器的性能和响应能力的最佳方法是什么 我目前正在使用 Pingdom 并希望它指向一个基本上模仿 现实世界查
  • Android Picasso 自动旋转图像

    我正在使用 Picasso 在我的应用程序中加载来自网络的图像 我注意到有些图像显示旋转了 90 度 尽管当我在浏览器中打开图像时 我看到它的位置正确 我假设这些图像有 EXIF 数据 有什么方法可以让Picasso忽略EXIF吗 众所周知
  • 自动从实体类@Size值复制inputText maxlength

    是否可以设置maxlength的属性
  • Web Api oData v4 $ref 404 或服务器错误

    Problem 我可以使用以下命令成功地从该关系的任一端获取相关项目 http localhost api 练习 1 http localhost api Exercises 1 expand 测量值 http localhost 4954