我正在编写一个应用程序,我需要事先在我的控制器类中处理一些场景,就像必须提供某些属性一样,否则状态代码将是BadRequest。这是我的班级相似。
public class MyClass
{
[Required]
public IEnumerable<NewObject> NewObjects { get; set; }
}
public class NewObject : INewObject
{
public NewObject(string typeName, IEnumerable<Property> properties)
{
TypeName = typeName;
Properties = properties;
}
[JsonProperty(Required = Required.Always)]
public string TypeName { get; }
public IEnumerable<IProperty> Properties { get; }
}
public interface IProperty
{
string Name { get; }
object Value { get; }
}
现在虽然我已将TypeName
标记为必需属性,但如果我在从swagger发送请求时未在json内容中传递该内容,则json反序列化不会失败。我试图搜索,但我得到了一个答案,设置Required
到Always
应该有效。
以下是我通过招摇的Json内容:
{
"NewObjects": [
{
"Properties": [
{
"Name": "string",
"Value": ''
}
]
}
]
}
我通过查看其中一个解决方案,在下面写了一段代码:
var config = new HttpConfiguration();
var jsonFormatter = config.Formatters.JsonFormatter;
jsonFormatter.SerializerSettings.MissingMemberHandling = MissingMemberHandling.Error;
config.MapHttpAttributeRoutes();
仍然无法正常工作: 注意:我使用的是Newtonsoft.Json版本11.0.1
这似乎是一个招摇的问题,因为当我序列化输入C#对象并再次反序列化时,我得到了正确的错误。 例如,在我的控制器类中,如果我说:
var input2 = JsonConvert.DeserializeObject<MyClass>(JsonConvert.SerializeObject(input))
然后input2抛出异常。
答案 0 :(得分:0)
您可以查看FluentValidation。如果我没有弄错的话,它的目的是专门用于验证jsons表单中的数据。
using FluentValidation;
public CertainActionValidator()
{
RuleFor(x => x.PropertyName).NotEmpty()
}
您可以在其中添加大量其他条件。