如果将[Required]放在引用类型上,并提供没有匹配的JSON属性的JSON,则会引发错误。
除了使用可空值类型或在类中包装值类型之外,是否可以在对Web API进行反序列化时对值类型强制执行[必需]?
要求不在下面的Test1上强制执行,因为它被强制为默认值零。即,如果您的JSON没有包含Field1属性,则序列化仍会成功完成。
我希望能够将[Required]放在我的值类型上,或者可能写一个新属性来完成此任务。
有设置可以做到这一点吗?或者,是否可以利用XML和JSON的反序列化来实现这一目标?
public async Task<IHttpActionResult> Method1(Clas1 model){}
public class Class1
{
...
[Required]
public int Field1 { get; set; }
}
Although it may not be possible with attributes,理论上解串器可以在将值强制转换为值类型之前检查属性。如果是的话,是否有我可以做的事件或设置?
使用Json.net,我可以添加一个属性[JsonProperty(Required = Required.AllowNull)]。我可以为XML反序列化做些类似的工作吗?
即:
// POST api/Account/Register
[AllowAnonymous]
[Route("Register")]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };
public class RegisterBindingModel //: IValidatableObject
{
[Required]
public string Email { get; set; }
public int Test1 { get; set; }
[Required]
public int Test3 { get; set; }
<RegisterBindingModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/WebApplication1.Models">
<Email>Sample string 2</Email>
<Test1>2</Test1>
</RegisterBindingModel>
答案 0 :(得分:1)
如果您知道范围,则可以使用范围属性。
[Range(0, 99)]
public int Field1{ get; set; }