从 HTTP POST 中检索响应正文

Sco*_*ttG 2 c# http-post asp.net-web-api

我正在向 API 发送 409 响应代码以及如下所示的响应正文:

    { 
       "message": "Exception thrown.",
       "errorDescription": "Object does not exist"
    }
Run Code Online (Sandbox Code Playgroud)

我怎样才能拉出响应体并反序列化它?

我正在使用 HttpClient:

    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri("http://localhost:60129");

    var model = new Inspection
    {
        CategoryId = 1,
        InspectionId = 0,
        Descriptor1 = "test descriptor 121212",
        Name = "my inspection 1121212"
    };

    var serializer = new JavaScriptSerializer();
    var json = serializer.Serialize(model);
    var stringContent = new StringContent(json, Encoding.UTF8, "application/json");

    var result = client.PostAsync("api/Inspections/UpdateInspection", stringContent);

    var r = result.Result;
Run Code Online (Sandbox Code Playgroud)

我似乎是一件很常见的事情,但我正在努力寻找数据在我的结果中的位置。

Nko*_*osi 8

您可以ReadAsAsync<T>将响应的内容用于具体类型或ReadAsStringAsync 获取原始 JSON 字符串。

还建议使用 Json.Net 来处理 JSON。

var response = await client.PostAsync("api/Inspections/UpdateInspection", stringContent);

var json = await response.Content.ReadAsStringAsync();
Run Code Online (Sandbox Code Playgroud)

可以创建一个具体的响应模型

public class ErrorBody { 
   public string message { get; set; }
   public string errorDescription { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并用于读取不成功的响应。

var response = await client.PostAsync("api/Inspections/UpdateInspection", stringContent);

if(response.IsSuccessStatusCode) {
    //...
} else {
    var error = await response.Content.ReadAsAsync<ErrorBody>();

    //...do something with error.
}
Run Code Online (Sandbox Code Playgroud)