2017-08-03 111 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將有助於