如何使用RestSharp向带[FromBody]的Post API发送字符串
解决RestSharp向[FromBody]字符串API发送请求的问题
你的ASP.NET Core API用[FromBody] string token接收请求时,要求请求体必须是符合JSON格式的字符串(也就是带双引号的字符串,比如"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."),而你之前的RestSharp调用没满足这个要求,所以绑定失败。
下面是两种可行的正确写法:
方法1:用AddStringBody生成标准JSON字符串
手动将token序列化为JSON格式的字符串(避免手动加引号出错,推荐用官方JSON序列化器):
using System.Text.Json; private async Task<(bool Success, JwtTokenDTO? Token)> RefreshToken(string? refreshToken) { RestRequest request = new RestRequest("api/refreshToken"); // 把字符串序列化为标准JSON格式(自动添加双引号) var jsonToken = JsonSerializer.Serialize(refreshToken); request.AddStringBody(jsonToken, DataFormat.Json); var response = await _client.ExecutePostAsync<ApiResponse<JwtTokenDTO>>(request); // ...后续逻辑 }
如果token里没有特殊字符,也可以手动加引号简化写法:
request.AddStringBody($"\"{refreshToken}\"", DataFormat.Json);
方法2:直接用AddJsonBody传入字符串
RestSharp的AddJsonBody方法如果传入的是字符串类型,会自动将其序列化为标准JSON格式的字符串,同时自动设置Content-Type: application/json,完全匹配API的要求:
private async Task<(bool Success, JwtTokenDTO? Token)> RefreshToken(string? refreshToken) { RestRequest request = new RestRequest("api/refreshToken"); request.AddJsonBody(refreshToken); var response = await _client.ExecutePostAsync<ApiResponse<JwtTokenDTO>>(request); // ...后续逻辑 }
为什么之前的尝试失败?
- 直接用
AddStringBody(refreshToken, DataFormat.Json):发送的是裸字符串(比如eyJhbGciOiJIUzI1Ni...),不是JSON规范要求的带引号字符串,ASP.NET Core无法将其绑定到[FromBody] string。 AddParameter系列方法:要么没设置正确的Content-Type,要么参数结构和API的[FromBody]单字符串不匹配。AddJsonBody(new { Token = refreshToken }):API接收的是单个字符串,而不是包含Token属性的对象,所以绑定失败。
Postman能成功是因为你在Postman里选择了raw-JSON格式,输入的是带引号的字符串,和上面两种方法的请求格式一致。
内容的提问来源于stack exchange,提问作者Marlon Fez
相关产品推荐
相关产品推荐

