.net 是否有办法重写序列化错误消息?

u91tlkcl  于 2023-02-17  发布在  .NET
关注(0)|答案(2)|浏览(125)

我有一个简单的POST请求主体类:

[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
    [HttpPost]
    public IActionResult Post(PostRequest request)
    {
        return Ok();
    }
}

public class PostRequest
{
    [Required]
    public String String { get; set; }
}

如果我发送一个int而不是一个string,则会返回以下错误消息:
"$. string":["JSON值无法转换为System.String。路径:$.字符串|行号:1|行内字节位置:13."]}
我不觉得公开幕后发生的事情是正确的。有没有办法返回一个通用的"The field String is invalid"消息?

ctzwtxfj

ctzwtxfj1#

此错误来自SystemTextJsonInputFormatter内部的System.Text.Json.JsonSerializer,在将请求正文反串行化到模型中时发生,您可以如下所示禁用它:

builder.Services.AddControllers().AddJsonOptions(options =>
    options.AllowInputFormatterExceptionMessages = false);

您将释放如下错误消息:

{
  "$.string": [
    "The input was not valid."
  ]
}
wh6knrhe

wh6knrhe2#

我不确定,但也许这会对你有所帮助。将以下代码粘贴到方法的最开头:

if (!ModelState.IsValid)
 {
     return BadRequest();
 }

相关问题