C#调用SQL Database REST API添加JSON请求体的技术问询
回答
首先明确:你必须包含properties根节点——这个结构是SQL Database REST API明确要求的请求体格式,缺少它的话API会返回400 Bad Request错误,无法正常创建/更新防火墙规则。
接下来给你两种在C#里生成符合要求的JSON并嵌入请求体的实现方式,选哪种都可以:
方法1:用匿名类型快速实现(适合简单场景)
这种方式不需要额外定义类,直接用匿名对象嵌套生成结构,再序列化JSON:
using Newtonsoft.Json; // 如果用Newtonsoft.Json,需要先安装对应NuGet包 // 或者用System.Text.Json(.NET Core/.NET 5+自带,无需额外安装) // 1. 构建符合API要求的嵌套结构 var firewallRulePayload = new { properties = new { startIpAddress = "0.0.0.3", endIpAddress = "0.0.0.3" } }; // 2. 序列化为JSON字符串 string jsonBody = JsonConvert.SerializeObject(firewallRulePayload); // 如果你用System.Text.Json,替换成: // string jsonBody = System.Text.Json.JsonSerializer.Serialize(firewallRulePayload); // 3. 写入请求体(补全你的代码片段) using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { // 别忘了设置请求的Content-Type,否则API无法正确解析JSON httpWebRequest.ContentType = "application/json"; streamWriter.Write(jsonBody); streamWriter.Flush(); }
方法2:用强类型类实现(更规范,适合复杂场景/后续扩展)
如果后续需要修改规则结构、添加更多字段,强类型类会更易维护,也能避免拼写错误:
// 先定义对应JSON结构的类 public class FirewallRuleRequest { public FirewallRuleProperties properties { get; set; } } public class FirewallRuleProperties { public string startIpAddress { get; set; } public string endIpAddress { get; set; } } // 然后实例化并序列化 var requestPayload = new FirewallRuleRequest { properties = new FirewallRuleProperties { startIpAddress = "0.0.0.3", endIpAddress = "0.0.0.3" } }; string jsonBody = JsonConvert.SerializeObject(requestPayload); // 同样可以替换为System.Text.Json的序列化方式 // 写入请求体(和方法1的步骤一致) using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { httpWebRequest.ContentType = "application/json"; streamWriter.Write(jsonBody); streamWriter.Flush(); }
关键注意点
- 一定要设置
httpWebRequest.ContentType = "application/json",告诉API你发送的是JSON格式的请求体; - 确保序列化后的JSON字段名和API要求完全一致(比如
startIpAddress是小驼峰格式,你的类/匿名对象字段名要对应,不能写错大小写)。
内容的提问来源于stack exchange,提问作者scottsanpedro
相关产品推荐
相关产品推荐

