【问题标题】:How to pass additional context along with a Conflict() response如何与 Conflict() 响应一起传递额外的上下文
【发布时间】:2022-07-06 15:21:13
【问题描述】:

我有一个带有一些 JavaScript 将表单数据发送到 API 的 Razor Pages 页面。 API 尝试更新数据库,如果存在并发冲突,则返回 409。JavaScript 然后检查响应状态是否为 409,并相应地通过 Conflict detected 等消息提醒用户。 问:如何将上下文与响应一起发回,以便用户可以看到哪些数据触发了冲突?

JavaScript:

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

               if (response.status == 409) {
                    alert("Conflict detected.");
                }

控制器代码

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

if (changedDsrs.Any())
{
    return Conflict();
}

我尝试将最后一行更改为return Conflict(new { statusText = changedDsrs.First().ReleaseId.ToString()}); 无济于事。 发布的代码工作正常:如果确实检测到冲突,则返回 409 并提醒用户 - 我只想知道如何向警报文本添加上下文以显示来自 changedDsrs 的信息

【问题讨论】:

标签: c# asp.net-core http-status-code-409


【解决方案1】:

控制器:

您可以返回以下内容:

if (changedDsrs.Any())
            {
                return Conflict(new { message = $"An existing dsr was found." });
            }

在 JavaScript 中:

var response = await fetch("api/dsr/updateStatus", {....

response 返回的fetch 是一个承诺。您可以再次使用await 来查看可用的属性。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await 例如

var text = await response.text();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多