我正在创建一个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]
的选项。
是否有一种方法可以查询详细信息,为什么上面的示例中的数据对象为空,以便我可以将其报告给调用方?
答案 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;
}
}