PostAsJson JsonArray C#Web API

时间:2013-09-07 16:16:42

标签: c# json asp.net-web-api

我正在尝试使用BigCommerce API发布一个名为类别的数组。我收到一个响应,我的数组[1]是一个无效的Json数组。

要进行测试,请转到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 个答案:

答案 0 :(得分:1)

如果要使用字典发送数组,请使用Dictionary<string, object>并添加数组本身,如下所示。

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

这将发布像"categories":[100,101]这样的JSON,这是你应该发送的。