C# 将XML发布到webapi仅绑定[FromBody]请求模型上的非集合属性
(初始问题已解决,但在下面的更新部分中,我对我所做的工作的原因有疑问) 我们有一个asp.net webApi项目,它有一个单一的POST操作,以前只需要接受一个格式为JSON的请求,并且会响应accept头所说的任何内容(无论是application/xml还是application/JSON) 现在,POST需要能够接受XML作为请求。这应该只是将内容类型设置为application/xml的问题,一切都应该很好 然而,模型绑定不是很有效,它部分有效,但不是全部有效 以下是该模型的简化版本:C# 将XML发布到webapi仅绑定[FromBody]请求模型上的非集合属性,c#,asp.net,.net,asp.net-web-api,C#,Asp.net,.net,Asp.net Web Api,(初始问题已解决,但在下面的更新部分中,我对我所做的工作的原因有疑问) 我们有一个asp.net webApi项目,它有一个单一的POST操作,以前只需要接受一个格式为JSON的请求,并且会响应accept头所说的任何内容(无论是application/xml还是application/JSON) 现在,POST需要能够接受XML作为请求。这应该只是将内容类型设置为application/xml的问题,一切都应该很好 然而,模型绑定不是很有效,它部分有效,但不是全部有效 以下是该模型的简化版本:
[DataContract(Namespace = "")]
public class PostModel
{
[DataMember(Name = "Identifier", Order = 0)]
[Required]
public string Identifier { get; set; }
[DataMember(Name = "ReturnNullItems", Order = 1)]
public bool? ReturnNullItems { get; set; }
[DataMember(Name = "RequestedItems", Order = 2)]
[Required]
public List<string> RequestedItems { get; set; }
[DataMember(Name = "Mileage", Order = 3)]
public int Mileage { get; set; }
}
下面也有这样的评论:
//var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
//xml.UseXmlSerializer = true;
我对上面的两行进行了评论,瞧,它是有效的
我猜我在告诉反序列化程序使用System.Net.Http.Formatting.XmlMediaTypeFormatter
反序列化请求主体。我还猜想,如果没有一些额外的信息(我不知道如何提供),默认的DataContractSerialiser无法很好地用分层xml反序列化xml
所以现在它起作用了,但我只能猜测如何和/或为什么。任何人都能给我指出正确的方向,或者让我知道为什么我所做的已经解决了这个问题吗?尝试将属性
[XmlArray(ElementName=“RequestedItems”)]
添加到PostModel中的RequestedItems
属性中class@MattG谢谢你;没有解决我的问题,但给了我一个应该去哪里看的提示。更新了我上面的问题。
<PostModel>
<Identifier>ya05fom</Identifier>
<ReturnNullItems>false</ReturnNullItems>
<RequestedItems>
<string>EngineCapacity</string>
<string>FuelType</string>
<string>ForwardGears</string>
<string>Transmission</string>
</RequestedItems>
<Mileage>20000</Mileage>
</PostModel>
GlobalConfiguration.Configuration.Formatters.Add(new System.Net.Http.Formatting.XmlMediaTypeFormatter());
//var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
//xml.UseXmlSerializer = true;