2016-11-24 7 views
0

まず第一に、私はこの問題を持っている...WebAPIのODataのv4のアクション

WebApi OData v4 ComlexType cannot have an EntityType

...「ゴミだということが、多分私はそれを回避することができます」考え出した私は、私がいることのODataを言ってみてくださいかもしれないと思いましたここで

iは

var acptBatch = Builder.EntityType<ProposedOffer>().Collection.Action("AcceptBatch"); 
acptBatch.Parameter<bool>("asSingleTransaction"); 
acptBatch.Parameter<string>("perspective"); 
acptBatch.ReturnsCollection<ValidationResult<ProposedOffer>>(); 

[HttpPost] 
[ODataRoute("AcceptBatch({asSingleTransaction},{perspective})")] 
public async Task<IHttpActionResult> AcceptBatch([FromUri]bool asSingleTransaction, [FromUri]string perspective, [FromBody]ICollection<int> offerIds) 
{ 
    try 
    { 
     var p = (Perspective)Enum.Parse(typeof(Perspective), perspective); 
     var result = await Service.AcceptOffers(asSingleTransaction, offerIds, p); 

     return Ok(result); 
    } 
    catch (Exception ex) 
    { 
     return await Failed(ex); 
    } 
} 

を行うにはしたいと思い時間かそこらのためにそれを戦ったものだ...私はただの文字列を返していますし、JSONオブジェクトを自分でシリアライズすでに私は

var acptBatch = Builder.EntityType<ProposedOffer>().Collection.Action("AcceptBatch"); 
acptBatch.Parameter<bool>("asSingleTransaction"); 
acptBatch.Parameter<string>("perspective"); 

[HttpPost] 
[ODataRoute("AcceptBatch({asSingleTransaction},{perspective})")] 
[Route("ProposedOffer/AcceptBatch({asSingleTransaction},{perspective})")] 
public async Task<IHttpActionResult> AcceptBatch([FromUri]bool asSingleTransaction, [FromUri]string perspective) 
{ 
    try 
    { 
     var offerIds = JsonConvert.DeserializeObject<ICollection<int>>(await Request.Content.ReadAsStringAsync()); 
     var p = (Perspective)Enum.Parse(typeof(Perspective), perspective); 
     var result = await Service.AcceptOffers(asSingleTransaction, offerIds, p); 

     return Ok(); 
    } 
    catch (Exception ex) 
    { 
     return await Failed(ex); 
    } 
} 

誰もが、私は戻って、クライアントの呼び出しのJavaScriptベースのコードに私の結果を得ることができる方法任意のアイデアを持って...これまでのところ得ていますか? この時点で、Ok()の中に何かを置くと、モデルを初期化するときにどのように宣言しても、フレームワークは406を返すようになります。

答えて

0

私は、ODataと単純なWebAPIメソッドで行うことが簡単であったという結論に至ったのですが、何が正しいか間違っていて、コンパイラ/ ODataフレームワークで多くのことを混乱させた後、 。

今日、ODataフレームワークはあまりにも未熟であり、より複雑なタスク(特にクエリに関係しないタスク)を実行するための基本的な能力が不足しているようです。これを完全にうまく処理できます!

この問題に直面している他の人たちへのアドバイス... ODataに失敗した場合、簡単なWebAPIコントローラを作成するだけで、簡単に失敗することはありません。

関連する問題