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

React前端与.NET/C#后端的异常处理方案咨询

React前端与.NET后端交互的错误处理方案

后端(.NET/C#)错误处理优化

直接抛出Exception会让ASP.NET默认返回500内部服务器错误,且不会把自定义错误消息返回给前端,需要调整为返回明确的HTTP状态码和错误信息,有两种常用方式:

方式1:直接返回IActionResult(推荐)

把方法返回类型从int改为IActionResult,主动校验参数并返回对应响应:

[HttpGet("calculator/calculate")]
public IActionResult Calculate(int input)
{
    if (input < 0)
    {
        // 返回400 Bad Request,携带自定义错误信息
        return BadRequest("Negative numbers are not allowed");
    }
    
    int[] res = new int[input];
    // 执行你的计算逻辑
    return Ok(res[input]); // 注:这里input作为数组索引时,若input为0会触发索引越界,需额外处理
}

方式2:全局异常捕获

如果需要统一处理所有异常,可以自定义异常过滤器,将异常转换为HTTP响应:

public class CustomExceptionFilter : IExceptionFilter
{
    public void OnException(ExceptionContext context)
    {
        // 可根据异常类型区分处理,比如自定义InvalidInputException
        var errorMsg = context.Exception.Message;
        context.Result = new BadRequestObjectResult(errorMsg);
        context.HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest;
        context.ExceptionHandled = true;
    }
}

然后在Program.cs全局注册过滤器:

builder.Services.AddControllers(options =>
{
    options.Filters.Add<CustomExceptionFilter>();
});

前端(React)错误处理修正

现有代码存在两个问题:onClick中的同步try/catch无法捕获异步Promise的错误;未解析后端返回的具体错误信息,需要调整:

修正请求方法,解析后端错误信息

const requestCalculation = {
    calculate: (number) => {
        const url = `/calculator/calculate?input=${number}`;
        return fetch(url)
            .then(response => {
                if (response.ok) {
                    return response.text();
                }
                // 解析后端返回的错误消息并抛出
                return response.text().then(errorMsg => {
                    throw new Error(errorMsg || '请求失败');
                });
            })
            .catch(error => {
                console.error(error);
                throw error; // 向上抛出,让调用方处理
            });
    },
};

修正按钮点击事件,正确捕获异步错误

使用async/await配合try/catch处理异步操作的错误:

return <button onClick={async () => {
    try {
        const result = await requestCalculation.calculate(-1);
        console.log('计算结果:', result);
        // 处理成功逻辑
    } catch (error) {
        console.error('错误:', error.message);
        // 这里可以给用户显示错误提示,比如弹出Toast
    }
}}>Click</button>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:23:17