validation - Mvc4 RTM 验证抛出错误

标签 validation asp.net-mvc-4 restsharp

关于模型验证的 rtm 位发生了一些变化。

我有一个简单的 View 模型,看起来像

    public class ProductViewModel
    { 
    [Required]
    [DataMember(IsRequired = true)]
    public int ProductTypeId { get; set; }
    public string Product { get; set; }
    }

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

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

{"Message":"An error has occurred.","ExceptionMessage":"Property 'ProductTypeId' on type 'Mine.Model.Model' is invalid. Value-typed properties marked as [Required] must also be marked with [DataMember(IsRequired=true)] to be recognized as required. Consider attributing the declaring type with [DataContract] and the property with [DataMember(IsRequired=true)].","ExceptionType":"System.InvalidOperationException","StackTrace":" at 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 at System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren(ModelMetadata metadata, ValidationContext validationContext, Object container)\r\n at System.Web.Http.Validation.DefaultBodyModelValidator.ValidateProperties(ModelMetadata metadata, ValidationContext validationContext)\r\n at System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren(ModelMetadata metadata, ValidationContext validationContext, Object container)\r\n at System.Web.Http.Validation.DefaultBodyModelValidator.Validate(Object model, Type type, ModelMetadataProvider metadataProvider, HttpActionContext actionContext, String keyPrefix)\r\n at System.Web.Http.ModelBinding.FormatterParameterBinding.<>c_DisplayClass1.b_0(Object model)\r\n at System.Threading.Tasks.TaskHelpersExtensions.<>c__DisplayClass361.<>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 cancellationToken)"}



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

任何帮助都会很棒。

最佳答案

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

关于validation - Mvc4 RTM 验证抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12234582/

相关文章:

c# - ASP.NET MVC 4 和 WYSIWYG 编辑器验证

iphone - 电话号码的 NSTextCheckingResult

sql-server - ASP.NET MVC 4 - 使用 Linq 读取数据库一次并使用多次

jquery - 将 JQuery 插件添加到新的 MVC4 Web 应用程序

c# - 如何在 asp.net core 中使用 RestSharp.NetCore

asp.net-mvc - MVC 中的流畅验证 : specify RuleSet for Client-Side validation

php - regEx 允许在数字之间插入字母

c# - 不允许下拉菜单选择空值

c# - 将代码从 RestSharp 转换为 HttpClient

c# - 我错过了什么? RestSharp 不会反序列化 Json