Mvc4 RTM验证抛出错误

时间:2012-09-02 08:49:35

标签: validation asp.net-mvc-4 restsharp

关于模型验证的rtm位有什么变化。

我有一个看起来像

的简单视图模型
    public class ProductViewModel
    { 
    [Required]
    [DataMember(IsRequired = true)]
    public int ProductTypeId { get; set; }
    public string Product { get; set; }
    }

(我刚刚添加了DataMember(IsRequired = true)作为我得到的错误消息,用它来解决问题。但是没有快乐)

在我的控制器中,模型状态告诉我模型有效但是当我尝试使用RestSharp将模型传递给我的api时,我得到以下错误。

  

{“消息”:“发生错误。”,“ExceptionMessage”:“Mine.Model.Model”类型的“属性'ProductTypeId'无效。标记为[必需]的值类型属性也必须标记将[DataMember(IsRequired = true)]识别为必需。考虑将声明类型与[DataContract]和属性[DataMember(IsRequired = true)]。“,”ExceptionType“:”System.InvalidOperationException“,” StackTrace“:”在System.Web.Http.Validation.Validators.ErrorModelValidator.Validate(ModelMetadata metadata,Object container)\ r \ n在System.Web.Http.Validation.DefaultBodyModelValidator.ShallowValidate(ModelMetadata metadata,ValidationContext validationContext,Object container) )\ r \ n在System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren(ModelMetadata metadata,ValidationContext validationContext,Object container)\ r \ n在System.Web.Http.Validation.DefaultBodyModelValidator.ValidateProperties(ModelMetadata metadata,ValidationContext validatio) nContext)\ r \ n在System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren(ModelMetadata metadata,ValidationContext validationContext,Object container)\ r \ n在System.Web.Http.Validation.DefaultBodyModelValidator.Validate(对象模型,类型类型) ,ModelMetadataProvider metadataProvider,HttpActionContext actionContext,String keyPrefix)\ r \ n在System.Web.Http.ModelBinding.FormatterParameterBinding。&lt;&gt; c_ DisplayClass1.b _0(对象模型)\ r \ n at System.Threading.Tasks.TaskHelpersExtensions。&lt;&gt; c__DisplayClass36 1.<>c__DisplayClass38.<Then>b__35()\r\n at System.Threading.Tasks.TaskHelpersExtensions.<>c__DisplayClass49.<ToAsyncVoidTask>b__48()\r\n at System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func 1 func,CancellationToken cancellationToken)“}

我没有使用rc位这个问题,但后来我才开始使用带有rtm位的restsharp库。

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:3)

除了将[DataMember(IsRequired = true)]添加到属性之外,您还需要确保在类级别应用属性[DataContract]。

答案 1 :(得分:0)

UI正在使用数据条目DataContract来创建数据输入表单,并在发布表单时创建后端。那么,是否可以安全地说后端需要[DataMember(IsRequired = true)]并且表单验证需要[Required(ErrorMessage = @“产品类型是必需的)],以便您可以访问错误消息?

我不确定为什么要这两个都做。为什么我们不能让前端和服务器端使用单个属性?