如何在使用FromBody

时间:2018-09-12 13:34:06

标签: asp.net-core

我正在创建一个Web api,它以JSON对象的形式在POST请求中接收数据。

真正的DataObj具有更多字段,因此我将其简化为以下内容,以显示解析必须失败的特定示例:

public class DataObj
{
   public int Value { get; set; }
}

[HttpPost]
public async Task<IActionResult> SubTables([FromBody] DataObj data)
{
  if (data == null)
  {
    string parsingErrorDetails = "";

    // ? how can I check which kind of parsing erros happend?

    return BadRequest("Failed to parse JSON with error: " + parsingErrorDetails);
  }
  ..
}

通常,如果您将有效的JSON数据发布到服务(如{ "value": 1 },它就可以正常工作。 但是在上面的示例中,有效的JSON主体也将是类似{ "value": 6123456789 }的主体,因为该值超过Int32.MaxValue。解析失败。

在我的情况下,主体具有一个带有多个字段的对象,如果我只返回404 Bad Request,则使问题分析变得复杂。 我的目标是我希望能够将此特定问题报告给呼叫者,以便呼叫者可以更轻松地分析呼叫的根本原因。 最好不要丢失使用[FromBody]的选项。

是否有一种方法可以查询详细信息,为什么上面的示例中的数据对象为空,以便我可以将其报告给调用方?

1 个答案:

答案 0 :(得分:0)

我将检查DataObj的setter属性的值,并在该值不合适的情况下抛出异常。

public class DataObj
{
    private int myInt;

    public int MyInt{
        get{ return myInt;}

        set
        {
            if (value > int.MaxValue)
                throw new ArgumentException("Invalid value for MyInt");
            myInt = value;
    }
}