servicestack,xmldocument,.net,Xml,Soap,servicestack,Xmldocument" /> servicestack,xmldocument,.net,Xml,Soap,servicestack,Xmldocument" />

.net 如何从ServiceStack API返回XmlDocument作为响应

.net 如何从ServiceStack API返回XmlDocument作为响应,.net,xml,soap,servicestack,xmldocument,.net,Xml,Soap,servicestack,Xmldocument,我们有一些ServiceStack API,它们是从外部工具调用的。该工具需要“XmlDocument”类型的输入,并且没有在该工具中编写将字符串转换为XmlDocument的代码的规定 问题是,早些时候,我们有SOAP服务返回XmlDocument,并且该工具运行良好。然而,最近我们将所有这些服务都转换为ServiceStack,从那时起,我们无法获得正确的XmlDocument响应。它总是返回空节点。 我认为这不是直截了当的,两者之间缺少一些东西 下面是我的回应对象 public class

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

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

下面是我的回应对象

public class RequisitionImportResponse : ResultResponse
{
    public XmlDocument ResponseXML { get; set; }
}
目前,我在ResponseXML中得到了空节点,我希望在这里接收正确的XmlDocument,当服务在SOAP中时,它用于返回该XmlDocument

有人能帮忙吗


谢谢

您可以在服务中返回
字符串
,例如:

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

public class XmlServices : Service
{
    [AddHeader(ContentType=MimeTypes.Xml)]
    public object Any(RequisitionImport request)
    {
        XmlDocument xmlDoc = ...;
        return xmlDoc.OuterXml;
    }
}
如果将配置为检查
XmlDocument
并将其写入响应,例如:

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

,谢谢你的回复。是的,我们目前只返回字符串。但为此,我们需要添加一些额外的步骤,以便在我们使用的第三方工具中将字符串转换为XmlDocument。我在想是否可以返回XmlDocument对象本身。感谢@mythz提供详细的答案
GlobalResponseFiltersAsync.Add(async (req, res, dto) => {
    if (dto is XmlDocument doc) {
        res.ContentType = MimeTypes.Xml;
        await res.WriteAsync(doc.OuterXml);
        res.EndRequest();
    }
});