ASP.NET Core Web API接收含JSON字符串参数的请求处理咨询
ASP.NET Core Web API处理JSON字符串字段400错误的解决方案
核心问题原因
400错误本质是jsonFileData字段的JSON字符串未正确处理,直接嵌套在请求JSON中破坏了整体结构,导致API的模型绑定失败。
具体处理方案
1. 对JSON字符串做转义处理
这是最直接的解决方式,需要将jsonFileData中的原始JSON内容转义为合法的JSON字符串:
- 把双引号替换为
\" - 把换行符替换为
\n - 把反斜杠替换为
\\
示例:
原始JSON内容:{"theme":"dark","fontSize":14}
转义后应为:"{\"theme\":\"dark\",\"fontSize\":14}"
2. 调整API的模型定义
如果不想让客户端做转义,可以修改API的接收模型,让框架自动处理原始JSON:
- 使用
JsonElement类型接收jsonFileData,它能直接解析嵌套的JSON对象:
public class ConfigRequest { public int UserID { get; set; } public string JsonFileName { get; set; } public JsonElement JsonFileData { get; set; } }
后续存入数据库时,可通过JsonFileData.ToString()将其转为字符串存储。
3. Swagger测试的正确输入方式
- 如果模型用
JsonElement类型,直接在Swagger请求体中嵌套JSON对象即可,Swagger会自动处理转义:
{ "userID": 123, "jsonFileName" : "aUserConfigFile.json", "jsonFileData" : {"theme":"dark","fontSize":14} }
- 如果模型用
string类型,必须输入转义后的字符串。
4. C++客户端的处理方式
推荐使用成熟的JSON库(如nlohmann/json)构建请求,自动完成转义:
nlohmann::json requestJson; requestJson["userID"] = 123; requestJson["jsonFileName"] = "aUserConfigFile.json"; nlohmann::json configData; configData["theme"] = "dark"; configData["fontSize"] = 14; requestJson["jsonFileData"] = configData.dump(); // dump()方法自动生成转义后的字符串
如果手动拼接JSON字符串,必须手动转义所有特殊字符。
内容的提问来源于stack exchange,提问作者user3328969
相关产品推荐
相关产品推荐

