关于模型验证的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。<> c_ DisplayClass1.b _0(对象模型)\ r \ n at System.Threading.Tasks.TaskHelpersExtensions。<> 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库。
任何帮助都会很棒。
答案 0 :(得分:3)
除了将[DataMember(IsRequired = true)]添加到属性之外,您还需要确保在类级别应用属性[DataContract]。
答案 1 :(得分:0)
UI正在使用数据条目DataContract来创建数据输入表单,并在发布表单时创建后端。那么,是否可以安全地说后端需要[DataMember(IsRequired = true)]并且表单验证需要[Required(ErrorMessage = @“产品类型是必需的)],以便您可以访问错误消息?
我不确定为什么要这两个都做。为什么我们不能让前端和服务器端使用单个属性?