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

ASP.NET Core返回Conflict()响应时如何携带额外上下文信息

问题解决方案

你之前后端传值的写法本身没有问题,没生效的核心原因是前端代码在检测到409状态码后,没有读取响应体携带的内容,直接弹出了固定提示文本。按以下两步修改即可:

后端Controller代码调整

直接将冲突相关的上下文信息作为参数传入Conflict()方法即可,ASP.NET Core 会自动将传入的对象序列化为JSON格式写入响应体,注意只返回前端需要展示的非敏感字段:

IEnumerable<DSR> changedDsrs = // DetectIfConflict();

if (changedDsrs.Any())
{
    return Conflict(new 
    {
        message = "检测到并发冲突",
        conflictReleaseIds = changedDsrs.Select(d => d.ReleaseId.ToString()).ToList()
    });
}

前端JavaScript代码调整

在409状态码的处理分支中,增加响应体解析逻辑,读取后端返回的冲突信息后拼接进提示文本:

var response = await fetch("api/dsr/updateStatus", {
    method: "POST",
    headers: {
        'Content-Type': 'application/json'
    },
    body: JSON.stringify(data)
});

if (response.status == 409) {
    // 解析响应中携带的JSON格式错误信息
    const errorInfo = await response.json();
    // 拼接冲突详情
    const conflictDetail = errorInfo.conflictReleaseIds.join(", ");
    alert(`Conflict detected. 触发冲突的ReleaseId:${conflictDetail}`);
}

补充说明:fetch API 不会因为响应状态码为4xx/5xx自动中断流程或抛出错误,只要服务端正常返回响应,无论状态码是多少,都可以通过response.json()/response.text()等方法读取响应体内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:09:48