2016-08-19 7 views
1

以下のODataカスタムアクションを指定します。より多くのリファクタリング・アクション・パラメータのフレンドリなバインディングを得ることは可能ですか?強力な型指定のODataActionParametersが可能ですか?

両方のマジック文字列がまったく同じである必要があります(.Parameter<int>("Rating")および(int)parameters["Rating"])。将来、ある時点で壊れてしまうものです。私はPARAMを入れてみました

コンフィグ

ODataModelBuilder builder = new ODataConventionModelBuilder(); 
builder.EntitySet<Product>("Products"); 

// New code: 
builder.Namespace = "ProductService"; 
builder.EntityType<Product>() 
    .Action("Rate") 
    .Parameter<int>("Rating"); 

コントローラ

[HttpPost] 
public async Task<IHttpActionResult> Rate([FromODataUri] int key, ODataActionParameters parameters) 
{ 
    if (!ModelState.IsValid) 
    { 
     return BadRequest(); 
    } 

    int rating = (int)parameters["Rating"]; 
    db.Ratings.Add(new ProductRating 
    { 
     ProductID = key, 
     Rating = rating 
    }); 

    try 
    { 
     await db.SaveChangesAsync(); 
    } 
    catch (DbUpdateException e) 
    { 
     if (!ProductExists(key)) 
     { 
      return NotFound(); 
     } 
     else 
     { 
      throw; 
     } 
    } 

    return StatusCode(HttpStatusCode.NoContent); 
} 

要求

POST http://localhost/Products(1)/ProductService.Rate HTTP/1.1 
Content-Type: application/json 
Content-Length: 12 

{"Rating":5} 

メソッド内で直接的に実行されます。しかし、私はそれを働かせることができませんでした。

public async Task<IHttpActionResult> Rate([FromODataUri] int key, int rate)

How to pass an objet as a parameter to an OData Action using ASP.NET Web Api?によると、それはObjectを使用することが可能ですが、私は唯一のパラメータとしてプリミティブ型を持っているようです。

アドバイスをしてください:)

答えて

1

を、私はあなたがODataActionParameters

https://github.com/OData/WebApi/issues/777この問題について話していると思う唯一のアクションパラメータがあるとき事が複雑に作り、我々は後に、このための回避策やデザインを持つようにしようとします6.0をリリースしました。

+1

これは関連しているようです。私はその更新を待つ必要があると思う。 –

関連する問題