2016-04-11 10 views
0

本当に助けが必要です。C#Odata WebApi投稿の要素のリスト

小さなWebApiプログラムをコーディングしています。

ユニットテストで気付いたのは、自分の投稿メソッドに要素のリストを送信することです。

まず、私のユニットテストを見てみましょう:

[TestMethod] 
    public async Task PostWithExpandoObjectSerilasationToDataType() 
    { 
     //Define an imaginary Car Object 
     List<dynamic> listExpando = new List<dynamic>(); 

     dynamic obj1 = new ExpandoObject(); 
     obj1.Attribute = "PS"; 
     obj1.DataType = "Integer"; 
     obj1.EntityId = "3"; 
     obj1.DefaultValue = ""; 

     dynamic obj2 = new ExpandoObject(); 
     obj2.Attribute = "Color"; 
     obj2.DataType = "Text Only"; 
     obj2.EntityId = "3"; 
     obj2.DefaultValue = ""; 

     dynamic obj3 = new ExpandoObject(); 
     obj3.Attribute = "Km"; 
     obj3.DataType = "Number"; 
     obj3.EntityId = "3"; 
     obj3.DefaultValue = "1.3"; 

     listExpando.Add(obj1); 
     listExpando.Add(obj2); 
     listExpando.Add(obj3); 

     JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); 
     javaScriptSerializer.RegisterConverters(new JavaScriptConverter[] { new ExpandoJsonconverter() }); 

     string jsonOfTest = javaScriptSerializer.Serialize(listExpando); 

     // arrange 
     UnityContainer container = UnityConfig.RegisterComponents(); 
     var start = new Startup(container); 

     using (TestServer server = TestServer.Create(builder => start.Configuration(builder))) 
     { 
      using (var client = new HttpClient(server.Handler)) 
      { 

       HttpContent content = new StringContent(jsonOfTest, Encoding.UTF8, "application/json"); 

       var request = new HttpRequestMessage 
       { 
        RequestUri = new Uri("http://testserver/odata/Attributes"), 
        Method = HttpMethod.Post, 
        Content = content 
       }; 

       string jsonContent = content.ReadAsStringAsync().Result; 
       request.Headers.Add("Prefer", "return=representation"); 

       // act 
       HttpResponseMessage response = await client.SendAsync(request); 
       Attributes result = response.Content.ReadAsAsync<Attributes>().Result; 

       // assert 
       Assert.IsNotNull(response); 
       Assert.AreEqual(HttpStatusCode.Created, response.StatusCode); 
       Assert.IsNotNull(result, "No result content found"); 
       Assert.IsNotNull(result.Attribute); 
      } 
     } 
    } 

次へ]をここで私のポストメソッドです:

public IHttpActionResult Post([ModelBinder]IEnumerable<Attributes> att) 
    {....} 

それは郵便法 ATTに来るときなかれヌル

です安心してサービスをしようとすると、このメッセージが表示されます:

"message": "コレクション(EAVService.Entities.Attributes)はエンティティタイプではありません。唯一のエンティティタイプは

ググ「。サポートされており、さまざまなものを試してみましたが、私は実用的なソリューション

私の問題を解決するために私を助けることができるが、任意のものを見つけdidntの?:)

よろしく アンドレ

されています のODataで
+0

Ohおよびbそうです。 "[{\"属性\ ":\" PS \ "、\"データ型\ ":\"整数\ "、\" EntityId \:\ \ "色\"、\ "データタイプ\":\ "テキストのみ\"、\ "EntityId \:\"、\ "DefaultValue \":\ " \ "データ型\":\ "番号\"、\ "EntityId \":\ "\"、\ " 3 \ "、\" DefaultValue \ ":\" 1.3 \ "}]" –

+0

あなたのテストはユニットテストではありません。これは統合テストです。単体テストは適切なコントローラをインスタンス化し、 'Post'を直接呼び出します。 – lencharest

答えて

0

に、POSTが正常にadd a single entity to a collectionに使用されているあなたのPost方法は、次のシグネチャを持つ必要がありますので:。

public IHttpActionResult Post(Attributes att) 

完全な例については、Create an OData v4 Endpoint Using ASP.NET Web API 2.2の「エンティティセットへのエンティティの追加」を参照してください。

  • Attributesのコレクションを受け入れるOData actionを実装

    • はあなたのサービスでbatch request処理を実装します。あなたは、単一のサービス呼び出しで複数のAttributesのエンティティを作成する必要がある場合

      は、次の2つのオプションがありますエンティティを適切なエンティティセットに一括して追加します。

  • 関連する問題