使用 HttpClient 发送自定义数据类型列表

Sending List of custom data type with HttpClient

我正在尝试将由自定义数据类型组成的列表发送到 API 控制器内的函数,但无法使其正常工作。

这是我自定义的数据类型

public class MinimalStatementModel
{
public int ActivityID { get; set; }
public string StatementCode { get; set; }
public string Value { get; set; }
public string Note { get; set; }
}

这是HttpClient部分

static async Task UpdateActivityStatement()
        {
            string uri = "/api/ExtraNet/UpdateActivityStatement";

            HttpClient client = new HttpClient();

            int ActivityId = 12345; //Aktivite Numarası
            string StatementCode = "123456";
            string Value = "Test";
            string Note = "Test";

            string token = ""

            client.BaseAddress = "address"
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/json"));
            client.Timeout = TimeSpan.FromMinutes(30);


            var postData = "{ \"ActivityID\":\"" + ActivityId + "\"" + ","
                             +"\"StatementCode\":\"" + StatementCode + "\"" + ","
                             +"\"Value\":\"" + Value + "\"" +"," 
                             +"\"Note\":\"" + Note + "\"}";

            var content = new StringContent(postData, Encoding.UTF8, "application/json");

            HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Post, uri);
            message.Headers.Add("Authorization", string.Format("bearer {0}", token));
            message.Content = content;

            HttpResponseMessage response = await client.SendAsync(message);

            var responseJson = await response.Content.ReadAsStringAsync();

            Console.WriteLine(responseJson);
        }

这是 API 控制器中的部分

public ResponseHelper UpdateActivityStatement(List<MinimalStatementModel> requestList)
        {
            //releveant codes
        }

我可以使用自定义数据类型和 HttpClient,但自定义数据类型列表花费的时间比我想象的要长。

我怎样才能做到这一点?

您的 JSON 是单个对象,而不是 list/array。将对象括在方括号 ("[]") 中以表示一个集合。

var postData = "[{ \"ActivityID\":" + ActivityId.ToString() + ","
             +"\"StatementCode\":\"" + StatementCode + "\"" + ","
             +"\"Value\":\"" + Value + "\"" +"," 
             +"\"Note\":\"" + Note + "\"}]";

更好的解决方案可能是:

    var json = JsonConvert.SerializeObject( new 
    {
     str.StatementCode = "123456",
     str.Value = "Test",
     str.Note = "Test"
    });
   //construct content to send
    var content = new System.Net.Http.StringContent(json, Encoding.UTF8, "application/json");