【问题标题】:WebApi Core 2.2 OData resource/path not found未找到 WebApi Core 2.2 OData 资源/路径
【发布时间】:2020-03-05 16:15:51
【问题描述】:

我正在使用 WebApi Core 2.2。 Microsoft OData 客户端正在从 WPF 应用程序添加新的父记录和子记录 (Deal+DealFee)。我在 Windows 10 上的 IIS 中托管。

当我调用 container.SaveChanges() 时,它成功调用了服务以添加父 Deal 记录,但随后它对该 url 执行了 SECOND POST 操作(这是由 MS odata 客户端库生成的):

POST http://localhost/mysite/odata/Deals(14)/DealFees

(注意这包括添加 Deal 时刚刚生成的 ID 14)

这是来自 MS odata 客户端库的两个单独的 POST,显然不是“深度插入”。但是,这会导致 404 (NotFound),我可以在 Fiddler 中观察到。以下网址可以完美运行:

/odata/Deals
/odata/Deals(14)
/odata/DealFees

似乎 WebApi Core 2.2 服务没有处理到 /Deals(14)/DealFees 路径的 POST,或者 /Deals(14)/DealFees 不是有效的 odata Uri? OData一般都支持这种路径吗?

我不知道。任何人都可以了解发生了什么吗?

【问题讨论】:

    标签: asp.net-core odata


    【解决方案1】:

    目前 WebAPI OData 不支持深度插入。对我来说,似乎客户端正在使用两个单独的发布请求更新资源集和导航资源集,而您收到 404 的原因是没有操作映射到服务中的第二个请求 URI。

    服务可以通过引入具有默认 OData 路由约定的 PostToDealFeesFromDeals 控制器操作来支持这一点,或者使用属性路由来映射此类请求的操作。

    如果操作已经存在,那么可能是第一个请求没有完成创建新记录,第二个请求被触发,因此 404。

    【讨论】:

    • 感谢您的回复。那么我是否将 PostToDealFeesFromDeals 放在 DealsController 上?默认的 OData 路由是否以某种方式将其映射到我自动提供的路径?
    • 顺便说一句,我最终只是在我的控制器中实现了 OData 函数 DeepInsert() 和 DeepUpdate()。比与 Microsoft 的不完整和有缺陷的实现作斗争要容易得多。
    猜你喜欢
    • 2015-09-08
    • 2019-11-26
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 2017-03-23
    • 2021-02-28
    • 2018-07-18
    • 2016-06-15
    相关资源
    最近更新 更多