首页 > 解决方案 > 如何使用 Refit 在 dotnet 5 中使用 XOP 处理 XML SOAP?

问题描述

如何处理包含 XOP 的 XML SOAP 消息?
正如标题所说,这是关于 .NET 5 和 Refit 的。

这是 XML 消息:

<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
    <soap-env:Header>
        <filename>somename</filename>
    </soap-env:Header>
    <soap-env:Body>
        <FileResult>
            <FileContent>
                <xop:Include href="cid:68803cfe-6883-4cb3-83f5-6883c8d774fc" xmlns:xop="http://www.w3.org/2004/08/xop/include"/>
            </FileContent>
        </FileResult>
    </soap-env:Body>
</soap-env:Envelope>

Refit客户端初始化如下:

var httpClient = new HttpClient(new Handlers.CustomHttpMessageHandler()) { BaseAddress = new Uri(<url>), DefaultRequestVersion = new Version(2, 0) };
return RestService.For<ITheApi>(httpClient,
        new RefitSettings
        {
            ContentSerializer = new XmlContentSerializer(
                new XmlContentSerializerSettings
                {
                    XmlReaderWriterSettings = new XmlReaderWriterSettings()
                    {
                        WriterSettings = new XmlWriterSettings
                        {
                            OmitXmlDeclaration = true,
                        },
                        ReaderSettings = new XmlReaderSettings
                        {
                            IgnoreWhitespace = true,

                        }
                    },
                    XmlNamespaces = new XmlSerializerNamespaces()
                }
            )
        }
    );

唯一添加日志记录并Handlers.CustomHttpMessageHandler取消转义查询参数。

我阅读了多个使用答案XmlDictionaryReader.CreateMtomReader,但这不是我可以在改装设置中添加的内容。这是否意味着我必须为此请求放弃 Refit 并仅使用 HttpClient ?或者还有其他选择吗?

标签: c#xmlsoap.net-5refit

解决方案


推荐阅读