我希望这是一个简单的问题。我以前没有使用webapi或一个宁静的服务公开api。所以我注意到在创建使用复杂对象参数的Put或Post方法时,正文中发送的xml需要包含命名空间信息。例如。
public HttpResponseMessage Put(Guid vendortoken, [FromBody] ActionMessage message)
{
if (message == null)
return Request.CreateErrorResponse(HttpStatusCode.ExpectationFailed,
"actionmessage must be provided in request body.");
return Request.CreateResponse(HttpStatusCode.OK);
}
要让消息返回非空,我的请求必须看起来像这样。
<ActionMessage
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.datacontract.org/2004/07/IntegrationModels">
<Message i:type="NewAgreement">
<AgreementGuid>3133b145-0571-477e-a87d-32f165187783</AgreementGuid>
<PaymentMethod>Cash</PaymentMethod>
</Message>
<Status>0</Status>
</ActionMessage>
这里的关键当然是xmlns。一方面,命名空间非常通用,所以我觉得它不应该是供应商提供的问题,另一方面它们真的需要吗?如果不能解决这个问题,那么如果他们留下名称空间,将会填充消息?
啊,如果我能让他们全部使用json :(
答案 0 :(得分:1)
命名空间在XML中很重要。如果你想删除它,你可以做的是改变你的ActionMessage
类,用适当的属性注释它(在你的情况下,我假设它是[DataContract(Namespace="")]
),并且这应该删除输入中对命名空间的需要(实际上,在使用命名空间进行更改之后将是一个错误,所以如果您已经有客户使用您的API,请考虑其影响。)