API请求体如何构造?无Swagger时怎么获取.NET接口的请求体结构
未知API请求体结构查询方法
- 优先抓包验证:在测试环境触发目标API的调用,用Fiddler、Charles或者操作系统自带的网络监控工具抓包,直接提取实际发送的JSON请求体,是准确率最高的方式。如果是本地调试的.NET程序,也可以直接在HTTP请求发送的位置打断点,查看序列化前的入参对象,或者序列化后的最终请求报文内容。
- 回溯代码入参类型:顺着你已经找到的API调用参数往上找,定位这个参数对应的C#类型定义。如果是用ASP.NET Core自动绑定、或者用Newtonsoft.Json/System.Text.Json做序列化,C#类的属性结构、字段可空性、
JsonPropertyName/JsonProperty特性的配置,会直接对应JSON请求体的结构。 - 复用已知结构验证:你已经有一个参数完全相同的API请求体结构,绝大多数场景下新API的请求体结构和已知的完全一致,可以先拿已知结构在测试环境发起调用验证,只要没有返回400参数错误即可正常使用。
- 若调用的是封装好的SDK,直接找SDK中对应API方法的入参类型定义,该类型就是JSON序列化的来源,和请求体结构一一对应。
.NET 场景下JSON请求体的常规构造逻辑
这类嵌套结构的JSON请求体,在.NET代码中基本都是先定义对应结构的C#实体类,再把业务数据赋值给实体类对象,最后通过JSON序列化库转换为JSON字符串作为请求体,没有特殊情况不会手动拼接JSON字符串。
对应你给出的请求体结构,代码中的实体类定义参考如下:
// 最外层请求体类 public class AppAssignRequest { public List<ConnectedApp> connectedApps { get; set; } } public class ConnectedApp { public string connectedAppId { get; set; } public List<ApplicationRole> applicationRoles { get; set; } } public class ApplicationRole { public string roleId { get; set; } public List<AssignedResource> assignedResources { get; set; } } public class AssignedResource { public string resourceType { get; set; } public string resourceId { get; set; } public string resourceHint { get; set; } public List<object> resources { get; set; } }
实际构造请求时,会逐层给AppAssignRequest类的实例赋值,最后调用JsonSerializer.Serialize(实例)(System.Text.Json库)或者JsonConvert.SerializeObject(实例)(Newtonsoft.Json库)得到最终的JSON请求体,再放入HTTP请求的Body中发送。
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

