You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 14:12:32