反序列化经过验证的对象时的默认值

时间:2015-01-10 00:54:43

标签: c# validation deserialization postsharp

在WebAPI项目中:

public class MyObject
{
   [PostSharp.Patterns.Contract.StringLength(8, 63, ErrorMessage = "blala string")]
   public string Name { get; set; }

    [PostSharp.Patterns.Contract.Range(3,5)]
    public int Num { get; set; }
}

public class MyController : ApiController
{
   public HttpResponseMessage Post([FromBody]MyObject obj)
   {
      /// And here there's a problem...
   }
}

Post方法中,如果发送的名称字段的长度小于8,则obj.Name将为null。 以相同的方式,如果num字段小于3,则obj.Num将为0。

这会产生一个问题,因为当只是默认值而不抛出任何异常时,你会得到一个带有需要再次验证的字段的对象 - 在这种情况下,有点使用PostSharp来消除边缘。

BTW,我查看了IL,我找不到任何反序列化实现。

那么,任何想法为什么会发生这种情况以及可以做些什么?

0 个答案:

没有答案