2013-09-07 2 views
2

Я пытаюсь опубликовать массив, называемый категориями, используя API BigCommerce. Я получаю ответ, что мой массив [1] является недопустимым массивом Json.PostAsJson JsonArray C# Web API

Для проверки перейдите к https://developer.bigcommerce.com/console Продукты> создайте новый продукт.

Вот мой код:

public bool CreateNewProduct(string name, string sku, decimal price, decimal weight, List<string> categories = null, string type = "physical", string availability = "available") 
    { 
     HttpClientHandler handler = new HttpClientHandler(); 
     handler.Credentials = new NetworkCredential(username, api_key); 
     handler.UseDefaultCredentials = true; 
     HttpClient client = new HttpClient(handler) 
     { 
      BaseAddress = new Uri(baseUrl), 
     }; 


     Dictionary<string, string> values = new Dictionary<string, string>(); 
     values.Add("name", name); 
     values.Add("price", price.ToString()); 
     values.Add("weight", weight.ToString()); 
     values.Add("sku", sku); 

     string cats = string.Empty; 

     if (categories == null) 
     { 
      categories = new List<string>(); 
      categories.Add(GetAllCategories().FirstOrDefault().ID.ToString()); 
     } 
     else 
     { 
      foreach (string theInt in categories) 
      { 
       cats += theInt + ","; 
      } 

      cats.Remove(cats.Length - 1); 

     } 

     values.Add("categories", "[1]"); 
     values.Add("type", type); 
     values.Add("availability", availability); 

     string userP = username + ":" + api_key; 
     byte[] authBytes = Encoding.UTF8.GetBytes(userP).ToArray(); 
     client.DefaultRequestHeaders.Add("Authorization", "Basic " + Convert.ToBase64String(authBytes)); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     string url = "products.json"; 

     HttpResponseMessage response = client.PostAsJsonAsync(url, values).Result; 
     if (response.IsSuccessStatusCode) 
     { 
      Product result = response.Content.ReadAsAsync<Product>().Result; 
      if (result != null) 
      { 
       return true; 
      } 
     } 

     return false; 

    } 

Вот мой запрос:

POST xyz/api/v2/products.json HTTP/1.1 
Authorization: Basic adf 
Accept: application/json 
Content-Type: application/json; charset=utf-8 
Host: x 
Content-Length: 132 
Expect: 100-continue 

{"name":"test product 1","price":"100","weight":"1","sku":"test111","categories":"[1]","type":"physical","availability":"available"} 

Вот ответ:

[{"status":400,"message":"The field 'categories' is invalid.","details":{"invalid_reason":"The provided value is not a valid array."}}] 

ответ

1

Если вы хотите отправить массив с использованием словаря , используйте Dictionary<string, object> и добавьте массив, как это.

values.Add("categories", new[] { 100, 101 }); 

Это вывесит JSON как "categories":[100,101], который является то, что вы должны отправить.

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