【发布时间】:2021-04-05 11:57:02
【问题描述】:
我正在使用 HttpClient 进行 GET 调用,我想解析 Json 响应并断言键值对
这是我的代码
public partial class EntityClass
{
[JsonProperty("StatusCode")]
public string StatusCode { get; set; }
// more code
}
using (HttpClientHandler handler = new HttpClientHandler())
{
handler.Credentials = new NetworkCredential(@"Domain\user", "password");
using (HttpClient client = new HttpClient(handler))
{
client.BaseAddress = new Uri("https://baseURL");
client.DefaultRequestHeaders.Accept.Clear();
HttpResponseMessage response = await client.GetAsync("api/apiendpoint")
response.EnsureSuccessStatusCode();
string responsebody = response.Content.ReadAsStringAsync().Result;
var data = JsonConvert.DeserializeObject<EntityClass>(responsebody);
}
}
我可以这样断言响应
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
但是,我想在 Json 响应中声明每个键值对。我不能让它与上面的代码一起工作 如何访问键值对和断言?
例如,如果 Json 响应是:
{
StatusCode:200,
Key1: Value1,
Key2: Value2
}
我希望能够断言喜欢
Assert.AreEqual(200,data.StatusCode);
Assert.AreEqual(Value1, data.Key1);
Assert.AreEqual(Value2, data.Key2);
但是在我的代码 response.StatusCode 中返回 OK 而不是 200
【问题讨论】:
-
代码中的“responsebody”将不包含响应代码。响应代码是 HttpResponseMessage 的属性,而不是 HttpResponseMessage.Content。您可以在反序列化调用创建其余部分后手动添加它。
-
你想断言从json解析的对象的属性具有特定的值(什么属性和什么值?)或者你想将
HttpResponseMessage转换为json并断言一些属性和值(哪些?)在那? -
@ZdeněkJelínek 例如,如果响应是 {StatusCode: 200, Key1: Value, Key2: Value} 我希望能够根据要求分别声明每个值
-
@ZdeněkJelínek 我添加了更多细节。当我断言 response.StatusCode 值是 OK 而不是 200
-
根据您的编辑:
HttpResponse上没有Value1或Value2属性。你确定你的最后一个代码 sn-p 不应该包含data而不是response吗?因为data是解析后的响应json 正文,而response是抽象的HTTP 响应,恰好也有StatusCode属性。
标签: c# asp.net api automation httpclient