使用RestSharp调用LetterXpress API认证失败,疑JSON语法有误
问题分析与修复
核心问题
你的代码存在两个关键问题导致认证失败:
AddJsonBody用法错误:AddJsonBody的作用是将.NET对象自动序列化为JSON字符串作为请求体,但你传入的是手动拼接好的JSON字符串,这会让RestSharp对该字符串再次进行JSON序列化,最终发送的请求体是被转义的嵌套字符串(比如"{\"auth\":{...}}"),服务器无法正确解析认证信息。- GET请求携带请求体不符合HTTP规范:虽然少数服务器支持GET请求带请求体,但这并非标准做法。Postman能正常运行,大概率是因为你在Postman中使用的是POST方法,而非GET。
修复方案
方案1:用.NET对象自动序列化(推荐)
直接创建认证对象,让RestSharp处理JSON序列化,同时匹配Postman的请求方法(如果Postman用POST,就把Method.GET改成Method.POST):
var client = new RestClient("https://api.letterxpress.de/v2/balance"); // 替换为Postman中实际使用的请求方法,比如Method.POST var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); // 创建认证实体对象 var authPayload = new { auth = new { username = "LXPApi1", apikey = "442807b35e250ec767221fe3ba", mode = "live" } }; // 传入对象,RestSharp自动生成正确的JSON request.AddJsonBody(authPayload); IRestResponse response = await client.ExecuteAsync(request); string meinString = response.Content; textBox4.Text = meinString;
方案2:手动拼接JSON时用AddStringBody
如果坚持手动拼接JSON,需要使用AddStringBody避免重复序列化:
var client = new RestClient("https://api.letterxpress.de/v2/balance"); var request = new RestRequest(Method.POST); // 匹配Postman的请求方法 request.AddHeader("Content-Type", "application/json"); // 使用@符号避免转义,让JSON格式更清晰 string jsonString = @" { ""auth"": { ""username"" : ""LXPApi1"", ""apikey"" : ""442807b35e250ec767221fe3ba"", ""mode"" : ""live"" } }"; // 直接传入JSON字符串,指定内容类型 request.AddStringBody(jsonString, ContentType.Json); IRestResponse response = await client.ExecuteAsync(request); string meinString = response.Content; textBox4.Text = meinString;
额外检查
- 核对Postman的请求方法:确认Postman中是GET还是POST,保持代码与之一致。
- 查阅API文档:确认LetterXpress的/v2/balance API要求的认证方式是请求体还是请求头(比如Basic Auth、Bearer Token),避免方向错误。
内容的提问来源于stack exchange,提问作者fabB
相关产品推荐
相关产品推荐

