2017-08-03 81 views
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); 
} 

说我有问题是,当我做来自客户端的请求时,如果我没有这种新的方法来实现它工作正常,并调用基化酶法和实体被更新,但我加入后这一点,使用完全相同则返回400响应相同的AJAX请求......谁能帮我搞清楚这是怎么回事?非常感谢:)

+0

我认为这是错误的本质和违背Odataprotocol。 'PUT'必须有模型作为参数。或三角洲。你不能把简单的原始类型。因此,您的覆盖方法隐藏了基本方法,但是Odata路线构建器无法找到它。因此400 –

回答

0

下面是摘自document

1.4.3更新实体 。 。 。 服务可能还支持PUT,但应该意识到在往返性质提前客户可能不知道,如打开或添加属性,或者在元数据中未指定的属性数据丢失的可能。 服务支持PUT必须替换与那些在请求主体指定的结构特性的所有值。 。 。 。

我向你保证,OData无法解决你提供的路由,因为它正在寻找PUT作为参数,然后你也可以有密钥。因此,你会得到错误#400。

我不知道,甚至,如果使用ODataRouteAttribute将有助于