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

ASP.NET Core+React请求报错:JSON解析异常原因排查

请求返回HTML而非JSON导致解析错误的原因分析

问题场景

在ASP.NET Core Web应用中,编写了如下TestController处理HTTP GET请求:

[ApiController]
[Route("api/[controller]")]
public class TestController : Controller
{
    [HttpGet("ProcessString")]
    public IActionResult ProcessString([FromQuery] string inputString)
    {
        var result = new { Result = inputString };
        return Ok(result);
    }
}

前端使用React组件发送请求:

/* eslint-disable no-unused-vars */
import React, { useState } from 'react';

function TestClient() {
    const uri = 'api/Test/ProcessString';
    const [inputString, setInputString] = useState('');
    const [response, setResponse] = useState('');

    const sendRequest = () => {
        fetch(`${uri}?inputString=${inputString}`, {
            headers: {
                Accept: 'application/json',
            },
        })
        .then(response => response.json())
        .then(data => {
                setResponse(data.Result);
            })
        .catch(error => {
                console.error('An error occurred:', error);
            });
    }

    return (
        <div>
            <input type="text" value={inputString} onChange={(e) => setInputString(e.target.value)} />
            <button onClick={sendRequest}>Send Request</button>
            <div>
                <strong>Response:</strong> {response}
            </div>
        </div>
    );
}

export default TestClient;

点击按钮发送请求时,触发错误:An error occurred: SyntaxError: Unexpected token '<', "<!doctype "... is not valid JSON"

可能的原因

  • API路由匹配失败,返回默认HTML页面:
    虽然控制器路由api/[controller]/ProcessString和前端请求的api/Test/ProcessString理论上匹配,但如果ASP.NET Core中间件顺序配置错误(比如UseSpa、UseStaticFiles放在UseRouting和UseEndpoints之前),会导致API请求被拦截,返回SPA的入口HTML页面而非JSON响应。

  • 请求的基础URL错误:
    前端使用相对路径api/Test/ProcessString,若React应用的部署根路径与API根路径不一致(比如React在子路径下,或API部署在不同端口/域名),实际请求的URL会无效,服务器返回404错误页面的HTML,导致JSON解析失败。

  • 控制器未被正确注册:
    若Program.cs中未添加builder.Services.AddControllers(),或控制器所在程序集未被框架扫描到,服务器无法识别该API接口,返回404页面的HTML。

  • 查询参数未编码导致请求异常:
    前端直接将inputString拼接进URL查询参数,若输入包含&、=、空格等特殊字符,会破坏URL格式,服务器可能返回错误页面的HTML。需用encodeURIComponent()编码参数:

    `${uri}?inputString=${encodeURIComponent(inputString)}`
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:13:10