实现子类方法的问题

问题描述 投票:0回答:1

我遇到了一点问题...问题是我有一个基类,它具有所有 GET/POST/PUT/DELETE 的实现,并且它是一个通用类,所以基本上我更新的任何实体都通过那里并且然后我有一个用于实现该类的实体类...

public virtual async Task<IHttpActionResult> Put([FromODataUri] TKey key)

问题是,对于其中一个实体,我想在更新数据库之前实现额外的逻辑,所以我想我只是在子类上执行它,然后在新逻辑之后我调用基类方法,这应该可以解决问题我创建了一个重载方法

public override Task<IHttpActionResult> Put(int key){
     //NEW LOGIC
     return base.Put(key);
}

我遇到的问题是,当我从客户端发出请求时,如果我没有实现这个新方法,它可以正常工作并调用基类方法并且实体已更新,但在我添加此方法之后,使用完全相同的 ajax 请求,它返回 400 响应...任何人都可以帮我弄清楚发生了什么吗?

.net ajax odata odatacontroller
1个回答
0
投票

这里是文档

的摘录

1.4.3 更新实体 。 。 。 服务可以另外支持 PUT,但应注意客户端可能事先不知道的往返属性中可能发生数据丢失的可能性,例如打开或添加的属性,或元数据中未指定的属性。 支持 PUT 的服务必须将结构属性的所有值替换为请求正文中指定的值。 。 。 .

我向您保证,OData 无法解析您提供的路线,因为它正在寻找以模型作为参数的

PUT
,然后您也可以拥有密钥。因此,您会收到错误#400。

我什至不知道使用

ODataRouteAttribute
是否会有帮助

© www.soinside.com 2019 - 2024. All rights reserved.