当web api需要int值时,如果客户端在JSON中发送null或空字符串,它会自动转换为0.如何防止这种情况?有这样的配置吗?我希望它抛出错误,因为它不是它所期望的。
答案 0 :(得分:4)
您可以使用JsonPropery
属性为DTO /属性添加注释,并根据需要进行标记:
public class MyDto
{
[JsonProperty(Required = Required.Always)]
public int RequiredProperty { get;set; }
}
使用此属性,如果在JSON字符串中未指定该属性的值,JsonConvert.DeserializeObject()
将抛出异常。
请点击此处查看示例:https://dotnetfiddle.net/TstCau
答案 1 :(得分:0)
你可以在一个整数内允许null,将它声明为" int?"
在此之后,您可以检查变量是否等于null并给出错误消息。
答案 2 :(得分:0)
这个解决方案也是一个黑客攻击,不应该定期使用。但是我们走了。
我遇到了一个问题 - 我想接受我的API上的枚举作为字符串,但希望在我的代码中将它们作为枚举而不是字符串。
我只是添加了一个额外的属性(可能会放置一些数据属性,如[NotMapped])并覆盖getter和setter,如下所示
/// <summary>
/// Required. A type of the metric for which data is requested.
/// </summary>
public Metrics MetricType { get; set; }
[Required]
/// <summary>
/// Alias for MetricType.
/// </summary>
public string Type
{
get
{
return MetricType.ToString();
}
set
{
try
{
MetricType = value.ToEnum<Metrics>();
}
catch (System.Exception)
{
throw new ArgumentException("Invalid Type parameter.");
}
}
}
我认为你可以覆盖那样的转换逻辑。检查字符串是否为null或为空分配正确的值。