【发布时间】:2012-09-02 08:49:35
【问题描述】:
关于模型验证的 rtm 位发生了一些变化。
我有一个简单的视图模型,看起来像
public class ProductViewModel
{
[Required]
[DataMember(IsRequired = true)]
public int ProductTypeId { get; set; }
public string Product { get; set; }
}
(我刚刚添加了 DataMember(IsRequired = true) 作为我收到的错误消息说使用它来解决问题。但是没有乐趣)
在我的控制器中,模型状态告诉我模型是有效的,但是当我尝试使用 RestSharp 将模型传递给我的 api 时,出现以下错误。
{"Message":"发生错误。","ExceptionMessage":"类型 'Mine.Model.Model' 上的属性 'ProductTypeId' 无效。标记为 [Required] 的值类型属性也必须标记将 [DataMember(IsRequired=true)] 识别为必需。考虑使用 [DataContract] 和属性使用 [DataMember(IsRequired=true)] 来分配声明类型。","ExceptionType":"System.InvalidOperationException"," StackTrace":" 在 System.Web.Http.Validation.Validators.ErrorModelValidator.Validate(ModelMetadata metadata, Object container)\r\n at System.Web.Http.Validation.DefaultBodyModelValidator.ShallowValidate(ModelMetadata metadata, ValidationContext validationContext, Object container) )\r\n 在 System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren(ModelMetadata 元数据,ValidationContext 验证上下文,对象容器)\r\n 在 System.Web.Http.Validation.DefaultBodyModelValidator.ValidateProperties(ModelMetadata 元数据,ValidationContext 验证nContext)\r\n 在 System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren(ModelMetadata 元数据,ValidationContext 验证上下文,对象容器)\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(Object model)\r\n 在 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](Func1 func, CancellationToken cancelToken)"}
我在 rc 位上没有遇到这个问题,但后来我才开始使用带有 rtm 位的 restsharp 库。
任何帮助都会很棒。
【问题讨论】:
-
我遇到了完全相同的问题。
标签: validation asp.net-mvc-4 restsharp