在http post请求中发送JSON数据C#

Gaz*_*991 5 c# post json httprequest

我正在尝试以 JSON 格式发送 http post 请求,该请求应如下所示:

{ 
"id":"72832",
"name":"John"
}
Run Code Online (Sandbox Code Playgroud)

我尝试像下面那样执行此操作,但如果我是正确的,这不会以 json 格式发送请求。

var values = new Dictionary<string,string>
{
    {"id","72832"},
    {"name","John"}
};

using (HttpClient client = new HttpClient())
{
    var content = new FormUrlEncodedContent(values);
    HttpResponseMessage response = await client.PostAsync("https://myurl",content);
    // code to do something with response
}
Run Code Online (Sandbox Code Playgroud)

如何修改代码以json格式发送请求?

Ser*_*rge 9

尝试这个

using (var client = new HttpClient())
{

    var contentType = new MediaTypeWithQualityHeaderValue("application/json");
    var baseAddress = "https://....";
    var api = "/controller/action";
    client.BaseAddress = new Uri(baseAddress);
    client.DefaultRequestHeaders.Accept.Add(contentType);
    
    var data = new Dictionary<string,string>
    {
        {"id","72832"},
        {"name","John"}
    };
    
    //or you can use an anonymous type
    //var data = new 
    //{
    //  id = 72832,
    //  name = "John"
    //};
    
    var jsonData = JsonConvert.SerializeObject(data);
    var contentData = new StringContent(jsonData, Encoding.UTF8, "application/json");
    
    var response = await client.PostAsync(api, contentData);
    
    if (response.IsSuccessStatusCode)
    {
        var stringData = await response.Content.ReadAsStringAsync();
        var result = JsonConvert.DeserializeObject<object>(stringData);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果请求返回时带有表单中的 JSON 数据

{ "return":"8.00", "name":"John" }
Run Code Online (Sandbox Code Playgroud)

你必须创建结果模型

public class ResultModel
{
    public string Name { get; set; }
    public double Return { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和代码

if (response.IsSuccessStatusCode)
{
    var stringData = await response.Content.ReadAsStringAsync();
    var result = JsonConvert.DeserializeObject<ResultModel>(stringData);
   
    double value = result.Return;
    string name = Result.Name;
}
Run Code Online (Sandbox Code Playgroud)