如何将XmlDocument作为ServiceStack API的响应返回

时间:2018-04-26 12:15:52

标签: .net xml soap servicestack xmldocument

我们正在使用一些从外部工具调用的ServiceStack API。这个工具需要输入" XmlDocument"类型,并没有规定编写代码将字符串转换为该工具中的XmlDocument。

问题是早些时候我们有SOAP服务返回XmlDocument并且该工具运行良好。但是,最近我们将所有这些服务转换为ServiceStack,从那时起我们就无法获得正确的XmlDocument响应。它总是返回空节点。 我相信这不是直截了当的,而且介于两者之间的东西也没有了。

以下是我的回复对象。

public class RequisitionImportResponse : ResultResponse
{
    public XmlDocument ResponseXML { get; set; }
}

目前我在ResponseXML中获取空节点,我希望在那里接收适当的XmlDocument,当服务在SOAP中时,它用于返回。

有人可以在这里帮忙吗?

由于

1 个答案:

答案 0 :(得分:2)

您可以在服务中返回string,例如:

public class RequisitionImport : IReturn<string> { ... }

public class XmlServices : Service
{
    [AddHeader(ContentType=MimeTypes.Xml)]
    public object Any(RequisitionImport request)
    {
        XmlDocument xmlDoc = ...;
        return xmlDoc.OuterXml;
    }
}

或者您可以允许服务返回XmlDocument

public class XmlServices : Service
{
    public object Any(RequisitionImport request)
    {
        XmlDocument xmlDoc = ...;
        return xmlDoc;
    }
}

如果您配置Response Filter以检查XmlDocument并将其写入回复,例如:

GlobalResponseFiltersAsync.Add(async (req, res, dto) => {
    if (dto is XmlDocument doc) {
        res.ContentType = MimeTypes.Xml;
        await res.WriteAsync(doc.OuterXml);
        res.EndRequest();
    }
});