Как вернуть XmlDocument в качестве ответа от API ServiceStack - PullRequest
0 голосов
/ 26 апреля 2018

У нас есть несколько API-интерфейсов ServiceStack, которые вызываются из внешнего инструмента. Этот инструмент ожидает ввода типа «XmlDocument», и в этом инструменте нет положения для написания кода для преобразования строки в XmlDocument.

Проблема в том, что раньше у нас были сервисы SOAP, которые возвращали XmlDocument, и инструмент работал хорошо. Однако недавно мы преобразовали все эти сервисы в ServiceStack, и с тех пор мы не можем получить правильный ответ XmlDocument. Он всегда возвращает пустые узлы. Я считаю, что это не так просто, и что-то среднее между ними отсутствует.

Ниже приводится мой объект ответа.

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

В настоящее время я получаю пустые узлы в ResponseXML, где я хотел бы получить правильный XmlDocument, который использовался для возврата, когда служба находилась в SOAP.

Может ли кто-нибудь помочь здесь?

Спасибо

1 Ответ

0 голосов
/ 26 апреля 2018

Вы можете вернуть 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;
    }
}

Если вы настроите Фильтр ответов для проверки на XmlDocument и запишите его в ответ, например:

GlobalResponseFiltersAsync.Add(async (req, res, dto) => {
    if (dto is XmlDocument doc) {
        res.ContentType = MimeTypes.Xml;
        await res.WriteAsync(doc.OuterXml);
        res.EndRequest();
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...