我正在测试我的 C# API 端点,发现控制器中返回的状态代码与使用 fetch 收到的状态代码不一致。我已将 C# 控制器配置为在参数值与预期格式不匹配时返回 400 Bad Request。但是,当我使用 fetch 发出包含无效参数的请求时,response.status 显示 422 Unprocessable Entity 而不是 400。
以下是相关代码:在我的 C# API 中,我检查类别参数是否有效。如果无效,我会设置一个带有 400 状态代码的 ProblemDetails 响应。当我填写 false 参数时,它会返回 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
});
}
测试时,我使用 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?这是在 C# 中设置自定义状态代码时 UnprocessableEntity 的工作方式的问题吗?还是可能是 JS 中的 fetch 实现所特有的问题?
该方法
UnprocessableEntity()
将 HTTP 状态代码设置为422
,无论您向其中传递什么对象。它使用的类型
object
不公开任何属性。对象被发送到 Json Serializer,后者使用反射来查看实际的 props 并从中构建 JSON,但UnprocessableEntity()
它本身并不执行任何操作。