Webapi从body中输入参数需要xml来包含xmlns

时间:2013-05-14 15:10:57

标签: asp.net-web-api parameters xml-namespaces

我希望这是一个简单的问题。我以前没有使用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 :(

1 个答案:

答案 0 :(得分:1)

命名空间在XML中很重要。如果你想删除它,你可以做的是改变你的ActionMessage类,用适当的属性注释它(在你的情况下,我假设它是[DataContract(Namespace="")]),并且这应该删除输入中对命名空间的需要(实际上,在使用命名空间进行更改之后将是一个错误,所以如果您已经有客户使用您的API,请考虑其影响。)