HttpWebRequest替换prompt为文本框内容触发400错误求助
解决思路
错误根源
直接拼接textBox1.Text到JSON字符串会破坏JSON语法结构:如果输入文本包含双引号、反斜杠、换行符等特殊字符,会导致生成的JSON不符合规范,服务器解析失败后返回400错误(请求格式无效)。比如输入文本是He said "hi",拼接后会变成"prompt":He said "hi",,这明显违反JSON字符串必须用双引号包裹且内部引号需转义的规则。
正确解决方案
不要手动拼接JSON,使用C#的JSON序列化库自动处理转义逻辑,确保生成的JSON始终合法:
方案1:使用System.Text.Json(.NET Core 3.0+ 内置)
// 构建请求对象 var requestPayload = new { prompt = textBox1.Text, n = 2, size = "256x256", response_format = "b64_json" }; // 序列化为合法JSON字符串 string body = System.Text.Json.JsonSerializer.Serialize(requestPayload);
方案2:使用Newtonsoft.Json(Json.NET,兼容所有.NET版本)
先通过NuGet安装Newtonsoft.Json包,再执行以下代码:
var requestPayload = new { prompt = textBox1.Text, n = 2, size = "256x256", response_format = "b64_json" }; string body = Newtonsoft.Json.JsonConvert.SerializeObject(requestPayload);
备选方案:手动转义特殊字符(不推荐)
如果无法使用序列化库,可手动转义JSON敏感字符,但容易遗漏场景,仅作应急:
// 转义双引号、反斜杠、换行、回车 string escapedPrompt = textBox1.Text .Replace("\\", "\\\\") .Replace("\"", "\\\"") .Replace("\n", "\\n") .Replace("\r", "\\r"); // 拼接合法JSON string body = $"{{\"prompt\": \"{escapedPrompt}\",\"n\": 2,\"size\": \"256x256\",\"response_format\":\"b64_json\"}}";
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

