nic*_*tch 7 api bad-request asp.net-core
当 asp.net core api 验证对象以及当我手动添加模型错误并调用 BadRequest(ModelState) 时,我得到了不一致的行为
例如,我的控制器中有这两个端点
[HttpPost]
public IActionResult Post(MyModel model)
{
return Ok();
}
[HttpPost]
[Route("test")]
public IActionResult OtherPost()
{
ModelState.AddModelError("field", "error");
return BadRequest(ModelState);
}
Run Code Online (Sandbox Code Playgroud)
和 MyModel 是:
public class MyModel
{
[Required]
[MinLength(10)]
public string MyProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我使用空主体调用第一个端点时,我不需要验证 ModelState 因为框架将自动执行并给出以下响应:
{
"errors":{"MyProperty":["The MyProperty field is required."]},
"title":"One or more validation errors occurred.",
"status":400,
"traceId":"80000005-0000-ff00-b63f-84710c7967bb"
}
Run Code Online (Sandbox Code Playgroud)
使用第二个控制器,我得到了这个:
{"field":["error"]}
Run Code Online (Sandbox Code Playgroud)
我是使用错误的方法向 ModelState 添加错误还是已知问题?
itm*_*nus 10
ApiController绑定失败消息完全相同的结果,您可以将其设置如下: public IActionResult Other2Post()
{
ModelState.AddModelError("field", "error");
var problemDetails = new ValidationProblemDetails(ModelState)
{
Status = StatusCodes.Status400BadRequest,
};
var traceId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
problemDetails.Extensions["traceId"] = traceId;
var result = new BadRequestObjectResult(problemDetails);
result.ContentTypes.Add("application/problem+json");
result.ContentTypes.Add("application/problem+xml");
return result;
}
Run Code Online (Sandbox Code Playgroud)
traceId,你可以简单地返回BadRequest的ValidationProblemDetails: ModelState.AddModelError("field", "error");
var problemDetails = new ValidationProblemDetails(ModelState)
{
Status = StatusCodes.Status400BadRequest,
};
return BadRequest(problemDetails);
Run Code Online (Sandbox Code Playgroud)
演示:
小智 7
你可以用
public IActionResult Post(SomeModel model)
{
ModelState.AddModelError("key", "message");
return ValidationProblem(ModelState);
}
Run Code Online (Sandbox Code Playgroud)
此代码产生类似的响应,仅没有 traceId。
UPD1:对于asp.net core 3.1,它返回traceId
| 归档时间: |
|
| 查看次数: |
2711 次 |
| 最近记录: |