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 响应......谁能帮我弄清楚发生了什么?非常感谢 :)

4

1 回答 1

0

这是从文档中提取的

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

我向您保证,OData 无法解析您提供的路线,因为它正在寻找PUT模型作为参数,然后您也可以拥有密钥。因此,您会收到错误 #400。

我什至不知道使用ODataRouteAttribute是否有帮助

于 2017-08-03T20:42:28.147 回答