C# 数据成员';WebApi服务中的[FromUri]属性忽略了s Name属性

C# 数据成员';WebApi服务中的[FromUri]属性忽略了s Name属性,c#,rest,asp.net-web-api2,datamember,C#,Rest,Asp.net Web Api2,Datamember,我们正在使用Asp.NETWebAPI创建RestService。但由于某些原因,当尝试使用[FromURI]属性反序列化复杂属性时,名称属性在数据成员属性中被忽略 例如,我们可能有: 方法: 型号: [DataContract] public class User { [DataMember(Name = "username")] public string Username{ get; set; } [DataMember(Name = "isActive", IsR

我们正在使用Asp.NETWebAPI创建RestService。但由于某些原因,当尝试使用
[FromURI]
属性反序列化复杂属性时,
名称
属性在
数据成员
属性中被忽略

例如,我们可能有: 方法:

型号:

[DataContract]
public class User
{
    [DataMember(Name = "username")]
    public string Username{ get; set; }
    [DataMember(Name = "isActive", IsRequired = false)]
    public bool? Active { get; set; }
}
当反序列化
用户
时,我们得到预期的用户名,但是
活动
为空
。另一方面,当序列化数据时,我们得到了预期的
isActive
username
。如果我们在查询字符串中使用
active
发送请求,它将按预期工作

显然,
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
property

我已经检查了一个解决方案,我能找到的最接近的主题是,但它没有使用
[FromUri]
,而是
应用程序/x-www-form-urlencoded
属性,它并没有真正解决

任何想法、建议或建议都将不胜感激

您必须检查“获取”请求。您的get请求必须是这样的

GET api/foo?username=fooname&active=false
您不必使用DataContract和DataMember属性来实现这一点。这些属性只是为了另一件事,它不是用于的主要原因

在get方法上获得有效点击后,在方法中可以检查modelstate,如

if (ModelState.IsValid) {
/// your code goes here    
}

你有没有想过,出了什么问题?我面临着同样的问题。不幸的是没有。。。我在WebApi中与这个bug和解并解决了它…这里也有报道。如果您想使用DataContract,那么我建议您将HttpGet更改为HttpPost。否则,您将需要处理该错误。我的2美分。你能展示一下你是如何以JSON格式发送对象的吗?Heya@jaroslaw,这个问题已经有5年了,因此已经有点过时了,我不确定它在这个时代是否仍然相关。。。如果你有一个特别的相关问题,我建议你就这个问题单独提问。你好,orhun.begendi,谢谢你的帮助。不幸的是,这不是一个问题。请求通过,我“获取”了它:)问题在于DataMember描述符中定义的名称被忽略。再次尝试阅读整个描述:)您好,您看过这篇文章吗?我发现这对本主题非常有用,有了这一点,您可以强制在web api请求中使用datamember属性来配置GlobalConfiguration.configuration.Services.RemoveAll(typeof(System.web.Http.Validation.ModelValidatorProvider),v=>v为InvalidModelValidatorProvider);我希望它有用。您好,您可以尝试构建自己的模型绑定。继承自伊莫代尔宾德。可能会有帮助,您可以检查OP想要使用的这篇文章。&isActive=false,例如,这里没有要检查的内容,因为没有指定要检查的内容。。
if (ModelState.IsValid) {
/// your code goes here    
}