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

Controller返回的string对象无法在Razor Component中读取的问题

问题原因与解决方案

问题根源

当ASP.NET Core的Controller直接返回string类型时,框架默认会把它作为**纯文本(text/plain)**返回,内容就是字符串本身(比如test),而GetFromJsonAsync<T>方法要求响应内容是标准JSON格式。标准的JSON字符串必须被双引号包裹(比如"test"),纯文本的字符串不符合JSON语法规则,所以解析时会抛出JSON语法错误。

而返回自定义对象(比如MyObject)时,框架会自动序列化为标准的JSON对象,符合GetFromJsonAsync<T>的解析要求,所以能正常工作。

解决方法

方法1:将字符串包装为对象返回

创建一个简单的包装类,把字符串作为属性返回,这样框架会自动序列化为合法的JSON对象:

// 新增包装类
public class StringResponse
{
    public string Value { get; set; }
}

// 修改Controller方法
[HttpGet("GetString")]
public async Task<StringResponse> GetString(int? id)
{
    string retval = "";
    // ... 业务逻辑
    return new StringResponse { Value = retval };
}

// 前端调用
var response = await _http.GetFromJsonAsync<StringResponse>("My/GetString?id=15");
string myString = response.Value;

方法2:强制返回JSON格式的字符串

在Controller方法中使用Json()方法返回,这样会把字符串包装为标准的JSON字符串(带双引号),同时响应的Content-Type会设为application/json:

[HttpGet("GetString")]
public async Task<IActionResult> GetString(int? id)
{
    string retval = "";
    // ... 业务逻辑
    return Json(retval);
}

// 前端调用保持不变
string myString = await _http.GetFromJsonAsync<string>("My/GetString?id=15");

方法3:前端改用GetStringAsync获取纯文本

既然后端返回的是纯文本,前端直接用GetStringAsync获取,不需要JSON解析:

// 前端修改调用方式
string myString = await _http.GetStringAsync("My/GetString?id=15");

内容的提问来源于stack exchange,提问作者MrWuf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:46:24