c# – 在WebApi服务中使用[FromUri]属性忽略DataMember的Name属
我们正在使用Asp.Net WebApi创建RestService.但是由于某些原因,在尝试使用[FromURI]属性反序列化复杂属性时,DataMember属性中的Name属性被忽略.
例如我们可能有: public IHttpActionResult Get([FromUri]User user) 模型: [DataContract] public class User { [DataMember(Name = "username")] public string Username{ get; set; } [DataMember(Name = "isActive",IsRequired = false)] public bool? Active { get; set; } } 反序列化用户时,我们按预期获取用户名,但对于Active为null.另一方面,当序列化数据时,我们同时获得了isActive和用户名.如果我们发送查询字符串中的活动请求,它按预期工作. 这显然是IModelBinder的问题.由于某些原因,它不使用DataMember的Name属性.我检查了什么格式化器被包括和4个默认的注册: System.Net.Http.Formatting.JsonMediaTypeFormatter System.Net.Http.Formatting.XmlMediaTypeFormatter System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter System.Net.Http.Formatting.JQueryMvcFormUrlEncodedFormatter 我没有办法根据要求检查哪一个.我会假设它的FormUrlEncodedMediaTypeFormatter但我不能确定.另外,我不知道如果它甚至支持Name属性. 我已经检查了一个解决方案和最接近的主题,我可以找到是WebAPI DataMember Name not used when de/serializing via application/x-www-form-urlencoded,但它不使用[FromUri]但应用程序/ x-www-form-urlencoded属性,它没有真正解决. 任何想法,指点或建议将不胜感激. 解决方法
您必须检查您的“获取”请求.你的请求必须是这样的;
GET api/foo?username=fooname&active=false 您不需要DataContract和DataMember属性才能实现此目的.这些属性只是为了另一件事情,它不是使用的主要原因. 获得有效的get方法后,在你的方法,你可以检查modelstate像; if (ModelState.IsValid) { /// your code goes here } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |