【问题标题】:Return Json on a bad request在错误的请求上返回 Json
【发布时间】:2023-04-01 05:54:01
【问题描述】:

所以 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();
        }
    }
}

【问题讨论】:

    标签: c# asp.net-core asp.net-core-webapi


    【解决方案1】:

    您正在做的是将字符串传递给BadRequest(),这会使您的操作返回内容类型为纯文本的响应。

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

    return BadRequest(new { message = "bad request"});
    

    PS:正确的 JSON 格式是 {"field_name" : "field_value"}(如果值的类型是 number、bool、null,则不需要引号)。所以从你写的内容来看,即使你把 content-type 改成application/json,也无法正确解析。

    【讨论】:

    • 谢谢!啊,是的,那个 JSON 不合适。我只是为了这个例子把它放在一起。
    • 这如何工作? Ok 方法是通用的并接受任何对象,但 BadRequest 不是通用的,因此在尝试发送匿名对象时我得到“无法从匿名类型转换为字符串”
    • BadRequest 可以将对象作为参数:see image
    • 不适合我,我只能将纯字符串作为参数,但又不是 Json 格式,所以我不知道还能做什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    • 1970-01-01
    • 2019-11-12
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多