以错误的请求返回Json

Rya*_*opp 5 c# asp.net-core asp.net-core-webapi

所以OK(value)返回带有application/json头的格式化的json.然而,BadRequest()没有.如果请求是一个应用程序/ json,即使这是一个错误的请求,也不应该像那样响应?

[HttpPost]
    public IActionResult Post([FromBody]Resolution value)
    {
        using (_ctx)
        {
            try
            {
                if (ValidateResolution(value.Size))
                {
                    _ctx.Resolution.Add(value);
                    _ctx.SaveChanges();
                    return Ok(value);
                }
                return BadRequest("{message:hello}");
            } catch (Exception) {
                return BadRequest();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

小智 18

你正在做的是将一个字符串传递给BadRequest(),这使得你的Action返回一个内容类型为纯文本的响应.

如果您想返回一个响应类型为application/json的JSON对象,那么您应该将一个不是字符串的对象传递给BadRequest().您甚至可以传递一个匿名对象来快速创建一个JSON对象,如下所示:

return BadRequest(new { message = "bad request"});
Run Code Online (Sandbox Code Playgroud)

PS:正确的JSON格式是{"field_name":"field_value"}(没有值的引号是数字,bool,null).因此,根据您编写的内容,即使您将内容类型更改为application/json,也无法正确解析.

  • 这怎么工作?Ok 方法是通用的并接受任何对象,但 BadRequest 不是通用的,因此在尝试发送匿名对象时我得到“无法从匿名类型转换为字符串” (2认同)