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

.NET 5 Web API自定义错误信息在Axios捕获中无法获取的问题

问题

我开发了一个.NET 5 Web API,通过NotFound方法返回包含自定义错误信息的字符串,该自定义错误详情:
(a) 能在Postman的响应体中正常显示,但
(b) 在React的Axios代码的catch块中无法查看这些错误信息?

如何从.NET 5 Web API获取这类详细错误信息?axios.post请求正常,仅在模拟错误状态时,我希望获取API返回的额外错误信息传递给客户端。

API代码(.NET 5)

var errorDetails = new
{
    error = "Custom error",
    message = "Custom message",
    details = "Custom details"
};
var errorDetailsJson = JsonSerializer.Serialize(errorDetails);
return NotFound(errorDetailsJson);

React/Axios代码

try {
    let response = await axios.post(url, body, await getCustomAuthOptions('POST'));
    let data = await response.data;
    return data as T;
} catch (error) {
    console.log(error.toJSON());  // 这里看不到包含自定义错误信息的响应体
    throw error;
}

catch块中console.log的结果

{
  "message": "Request failed with status code 404",
  "name": "Error",
  "stack": "Error: Request failed with status code 404\n ...cut",
  "config": {
    "url": "https://localhost:5001/THE_URL_I_USE",
    "method": "post",
    "data": "",
    "headers": {
      "Accept": "application/json",
      "Content-Type": "application/json",
      "Authorization": "Bearer xxxetc"
    },
    "transformRequest": [
      null
    ],
    "transformResponse": [
      null
    ],
    "timeout": 0,
    "xsrfCookieName": "XSRF-TOKEN",
    "xsrfHeaderName": "X-XSRF-TOKEN",
    "maxContentLength": -1,
    "maxBodyLength": -1,
    "mode": "cors"
  }
}
解决方案

1. 修正.NET API的返回方式

你现在手动序列化错误对象并返回字符串,会导致响应的Content-Type为text/plain,而非Axios默认期望的application/json,这是Axios无法自动解析错误响应体的核心原因。

直接返回错误对象即可,ASP.NET Core会自动完成序列化并设置正确的响应头:

var errorDetails = new
{
    error = "Custom error",
    message = "Custom message",
    details = "Custom details"
};
return NotFound(errorDetails); // 直接返回对象,无需手动序列化

2. 修正Axios的错误处理逻辑

Axios抛出的错误对象中,服务器返回的响应数据存储在error.response.data里,而非error.toJSON()的结果。调整catch块代码如下:

try {
    let response = await axios.post(url, body, await getCustomAuthOptions('POST'));
    return response.data as T;
} catch (error) {
    // 区分网络错误和服务器返回的错误
    if (error.response) {
        // 服务器返回了响应(包括4xx/5xx状态码)
        console.log("自定义错误信息:", error.response.data);
        // 可提取错误信息抛给上层
        throw new Error(error.response.data.message || error.message);
    } else {
        // 网络错误等无响应的情况
        console.log("请求出错:", error.message);
        throw error;
    }
}

调整后就能在catch块中获取到API返回的自定义错误详情。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:47:42