2016-04-11 4 views
0

Мне действительно нужна помощь.C# Odata WebApi Список элементов в сообщении

Im кодирует небольшую программу WebApi.

В то время как тестирование устройства я заметил, что я не могу отправить список элементов в свой метод.

Во-первых, посмотрите на мой Unit Test:

[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) 
    {....} 

Когда дело доходит до сообщения Method ДТО все дни нуль

При попытке службы с отдыхом я получаю это сообщение:

«message»: «Collection (EAVService.Entities.Attributes) не является типом объекта. Только типы сущностей поддерживаются.»

гугла и пробовали разные вещи, но я не нашел рабочий раствор

Любой, кто может помочь мне решить мою проблему? :)

С наилучшими пожеланиями Андре

+0

Ох и b путь. При отладке это запрос JSON я могу найти: "[{\" Атрибут \ ": \" PS \», \ "DataType \": \ "Integer \", \ "EntityId \": \ "3 \", \ "DefaultValue \": \ "\"}, {\ "Attribute \": \ "Color \", \ "DataType \": \ "Только текст \", \ "EntityId \": \ "3 \", \ "DefaultValue \": \ "\"}, {\ "Атрибут \": \ "км \", \ "DataType \": \ "Число \", \ "EntityId \": \» 3 \ ", \" DefaultValue \ ": \" 1.3 \ "}]" –

+0

Ваш тест не является единичным тестом; это тест интеграции. Единичный тест будет создавать экземпляр соответствующего контроллера и сразу же вызвать «Почта». – lencharest

ответ

0

в OData, 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 сущностей в одном вызове службы, у вас есть два варианта:

  • Реализовать batch request обращение в службе

  • Реализовать OData action, который принимает коллекцию Attributes и добавляет их навалом/насыпью к соответствующему объекту

Смежные вопросы