C# API 控制器返回 400,但在 JavaScript 中获取 422 状态代码如何 - 为什么?

问题描述 投票:0回答:1

我正在测试我的 C# API 端点,发现控制器中返回的状态代码与使用 fetch 收到的状态代码之间存在差异。我已将 C# 控制器配置为在参数值与预期格式不匹配时返回 400 Bad Request。但是,当我使用 fetch 发出包含无效参数的请求时,response.status 显示 422 Unprocessable Entity 而不是 400。

相关代码如下: 在我的 C# API 中,我正在检查类别参数是否有效。如果不是,我会设置带有 400 状态代码的 ProblemDetails 响应。当我填写错误的参数时,它确实返回 400。

if (!string.IsNullOrEmpty(category) && category != "http://terminology.hl7.org/CodeSystem/observation-category|laboratory")
{
    return UnprocessableEntity(new ProblemDetails
    {
        Title = "Ongeldige parameter",
        Detail = "De enige toegestane waarde voor 'category' is 'http://terminology.hl7.org/CodeSystem/observation-category|laboratory'.",
        Status = 400
    });
}

response from c# endpoint

在测试时,我使用 fetch-api 来发出请求。此代码片段显示了我如何发送请求并记录响应状态。

async def make_request(params):
    response = await fetch('/api/request', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            url: document.getElementById('url').value,
            params: params
        })
    })

    data = await response.json()
    print(response.status)  # This shows 422 instead of 400
    return {
        'status': response.status,
        'data': data
    }

为什么JavaScript中的response.status显示422而不是400?这是设置自定义状态代码时 UnprocessableEntity 在 C# 中如何工作的问题,还是可能是 JS 中 fetch 实现特有的问题?

javascript asp.net-core-webapi fetch-api
1个回答
0
投票

您似乎假设传递给

error
UnprocessableEntity
对象会以某种方式识别出它是为了替换 HTTP 状态代码。

过载为:

public virtual UnprocessableEntityObjectResult UnprocessableEntity([ActionResultObjectValue] object? error)

仅将

error
参数作为
object
- 即不会有任何特定的语义含义,只会按原样传递到 UI。

© www.soinside.com 2019 - 2024. All rights reserved.