首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用FlUrl进行XML发布

如何使用FlUrl进行XML发布
EN

Stack Overflow用户
提问于 2015-03-10 18:06:41
回答 5查看 6.1K关注 0票数 3

FlUrl在处理Json/ job编码请求方面做得很好。但是,文档并没有真正指出如何处理其他请求类型,如text/xml

使用FlUrl进行XML发布的最佳方法是什么?

由于您需要再次构建URI和内容,这个(访问底层HttpClient)有点违背了使用FlUrl的目的:

代码语言:javascript
复制
var result = await "http://someUrl"
                   .AppendPathSegment(pathSegment)
                   .SetQueryParam("name", name)
                   .WithBasicAuth(_userName, _apiToken)
                   .HttpClient
                   .PostAsync(<uri>, <content>);
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-03-10 21:04:11

XML还没有成熟,但这是记录在案,也是我想为Flurl.Http 1.0提供的为数不多的特性之一。(令人惊讶的是,到目前为止还没有人提出要求。)

同时,Flurl很容易扩展。也可以通过扩展方法自己添加这种支持。这应该是您能够流利地发布XML字符串所需的全部内容:

代码语言:javascript
复制
public static class FlurlXmlExtensions
{
    // chain off an existing FlurlClient:
    public static async Task<HttpResponseMessage> PostXmlAsync(this FlurlClient fc, string xml) {
        try {
            var content = new CapturedStringContent(xml, Encoding.UTF8, "application/xml");
            return await fc.HttpClient.PostAsync(fc.Url, content);
        }
        finally {
            if (AutoDispose)
                Dispose();
        }
    }

    // chain off a Url object:
    public static Task<HttpResponseMessage> PostXmlAsync(this Url url, string xml) {
        return new FlurlClient(url, true).PostXmlAsync(xml);
    }

    // chain off a url string:
    public static Task<HttpResponseMessage> PostXmlAsync(this string url, string xml) {
        return new FlurlClient(url, true).PostXmlAsync(xml);
    }
}

更新:

我决定不在Flurl中包含XML支持,主要是因为一个社区成员加快了步伐,并为其创建了一个很好的扩展库:

https://github.com/lvermeulen/Flurl.Http.Xml

票数 5
EN

Stack Overflow用户

发布于 2015-03-10 21:04:13

通过源代码的挖掘,SendAsync似乎正在进行中。由于最新的软件包还不支持它,我想添加我自己的:

代码语言:javascript
复制
public static class FlurlHttpExtensions
{
    /// <summary>
    /// Sends an asynchronous POST request of specified data (usually an anonymous object or dictionary) formatted as XML.
    /// </summary>
    /// <param name="client">The FlurlClient</param>
    /// <param name="serializedXml">Data to be serialized and posted.</param>
    /// <returns>A Task whose result is the received HttpResponseMessage.</returns>
    public static Task<HttpResponseMessage> PostXmlAsync(this FlurlClient client, string serializedXml)
    {
        var request = new HttpRequestMessage(HttpMethod.Post, client.Url.ToString())
        {
            Content = new CapturedStringContent(serializedXml, Encoding.UTF8, "text/xml"),
            Method = HttpMethod.Post
        };
        return client.HttpClient.SendAsync(request);
    }
}

是的,我采取了一些捷径,比如接受序列化的XML,而不是自己序列化。目前,这对我来说是可行的。

如果有更好的方法,我会洗耳恭听的!

票数 1
EN

Stack Overflow用户

发布于 2017-12-05 11:49:01

我对此有点晚了,但是,我已经习惯于用Xml ( xml扩展有问题)本地使用Flurl。

首先,将xml数据字符串转换为Html内容。

代码语言:javascript
复制
var httpContent = new StringContent(xmlDateString, Encoding.UTF8, "text/xml");

然后,在正常的异步后调用中使用该内容。

代码语言:javascript
复制
var response = await "http://localhost/Notices/webservices/importer.asmx"
        .WithHeader("Authorization", "Basic ssssserrrrr")
        .WithHeader("Content-Type", "text/xml")
        .WithHeader("SOAPAction", "\"http://tempuri.org/ImportData\"")
        .PostAsync(httpContent);

在这个调用中,我将设置内容类型。我还设置了soap操作(这是我正在调用的web方法)。

那它就正常工作了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28970969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档