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

ASP.Net REST控制器返回BadRequest时消息被额外引号包裹求助

问题原因与解决方案

原因分析

当你在ASP.NET控制器中使用return BadRequest("A problem happened!");时,框架会自动将传入的字符串序列化为JSON格式的字符串。这意味着原始字符串会被包裹在双引号中并转义,最终返回的响应内容是"A problem happened!"。

HttpClient调用ReadAsStringAsync()时会直接读取原始的响应内容,所以得到的是带转义引号的\"A problem happened!\";而Postman会自动解析JSON内容,因此显示的是原始的字符串文本。

解决方案

1. 控制器返回纯文本响应

如果不需要JSON格式,直接返回纯文本类型的响应,避免框架自动序列化:

return BadRequest(new StringContent("A problem happened!", Encoding.UTF8, "text/plain"));

此时HttpClient读取到的就是不带额外引号的原始文本。

2. 客户端解析JSON字符串

既然响应是JSON格式的字符串,客户端可以用JSON解析器还原原始内容,无需手动去除引号:

using System.Text.Json;

// ...
var errorMessageJson = await response.Content.ReadAsStringAsync();
var errorMessage = JsonSerializer.Deserialize<string>(errorMessageJson);

3. 返回结构化错误对象(推荐)

符合REST接口规范的做法是返回结构化的错误对象,而非单纯字符串:

// 控制器代码
return BadRequest(new { Message = "A problem happened!" });

客户端定义对应的模型类并解析:

// 定义错误响应模型
public class ErrorResponse
{
    public string Message { get; set; }
}

// 解析代码
var errorResponse = await response.Content.ReadFromJsonAsync<ErrorResponse>();
var errorMessage = errorResponse.Message;

内容的提问来源于stack exchange,提问作者Mr. Boy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:15:22