0

我希望这是一个简单的问题。我之前没有使用 webapi 或 restful 服务制作公共 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 就好了 :(

4

1 回答 1

1

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

于 2013-05-14T22:42:12.610 回答