2017-08-03 17 views
1

私は少し問題があります...それは、すべてのGET/POST/PUT/DELETEの実装を持つ基本クラスを持っていて、それはGenericクラスなので基本的に何でもIエンティティIの更新が通過した後、私はそのクラスを実装し、私のエンティティのクラスを持っている...問題を実装する問題

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

事はそうエンティティの1のために、私は、データベースを更新する前に追加のロジックを実装したいということです私はちょうど子クラスでそれをやったと思って、その新しいロジックの後に私は基本クラスのメソッドを呼び出し、それはトリックを行う必要がありますので、オーバーロードされたメソッドを作成しました

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

クライアントからのリクエストを行うときに、この新しいメソッドを実装していないと、正常に動作し、ベースクラスメソッドが呼び出され、エンティティが更新されますが、追加した後にこれは、全く同じAjaxリクエストを使用して400のレスポンスを返します...何が起こっているのかを誰かが助けてくれますか?どうもありがとう:)

+0

を支援する場合、私は、でも、知りません。 'PUT'はmodelをパラメータとして持つ必要があります。またはデルタ。シンプルなプリミティブ型を置くことはできません。だから、あなたのオーバーライドメソッドは基本的なものを隠しますが、オダータのルートビルダはそれを見つけることができません。したがって400 –

答えて

0

はここdocument

1.4.3アップデートエンティティ からの抜粋です。 。 。 サービスは、PUTを追加サポートすることもできますが、開かれたプロパティや追加されたプロパティ、メタデータで指定されていないプロパティなど、クライアントが事前に知り得ないラウンドトリッププロパティのデータ損失の可能性を認識する必要があります。 PUTをサポートするサービスは、構造プロパティのすべての値を、要求本体で指定された値で置き換える必要があります。 。 。 。

私はパラメータとしてPUTを探しているので、ODataがあなたのルートを解決できないことを保証します。したがって、エラー#400が発生します。

ODataRouteAttributeを使用して、私は、これは本質的に間違っているとOdataprotocolに反すると思う