我怎样才能说服 Refit 不要添加 xml 前导码



我是使用Refit的新手。我现在正在使用 Refit 来调用一个需要 xml 作为输入的 REST API。这有效,但似乎 Refit 会自动添加众所周知的 xml 前导码来描述编码。

我想发送不带前导码的 xml 元素(根据目标系统的要求(。我该怎么做?这是我在启动类中的代码:

    var settings = new RefitSettings
    {
        ContentSerializer = new XmlContentSerializer()
    };
    services.AddRefitClient<IItemApi>(settings)
        .ConfigureHttpClient(c => c.BaseAddress = new Uri("http://127.0.0.1:5000"));

这是我的数据类和刚刚使用的接口

public class PayLoad
{
    public string A { get; set; }
    public string B { get; set; }
}
public interface IItemApi
{
    [Post("/target/{id}")]
    Task<ApiResponse<string>> PostItemAsync(string id, [Body] PayLoad item,
        CancellationToken cancellationToken = default);
}

下面是一个发布呼叫的示例:

        var result = itemApi.PostItemAsync("X",new PayLoad
        {
            A = "A",
            B = "B"
        });

这是原始请求:

POST http://127.0.0.1:5000/target/X HTTP/1.1
Content-Type: application/xml; charset=utf-8
Content-Length: 76
Host: 127.0.0.1:5000
<?xml version="1.0" encoding="utf-8"?><PayLoad><A>A</A><B>B</B></PayLoad>

这部分我如何以这种方式更改我的代码

<?xml version="1.0" encoding="utf-8"?>

不在请求中了?

您需要将 xml 序列化程序配置为跳过它,因此您需要将示例中的设置更改为如下所示:

var settings = new RefitSettings
    {
        ContentSerializer = new XmlContentSerializer(
            new XmlContentSerializerSettings
            {
                XmlReaderWriterSettings = new XmlReaderWriterSettings
                {
                    WriterSettings = new XmlWriterSettings
                    {
                        OmitXmlDeclaration = true
                    }
                }
            })
    };

相关内容

  • 没有找到相关文章

最新更新