【问题标题】:http client post async in c#c#中的httpclient postasync
【发布时间】:2018-03-08 13:58:02
【问题描述】:

我已经查看了这个example 在 F# 中执行发布请求,但我想知道如何使用异步发布请求来做同样的事情

type Authentication = 
    new() = {}
    member this.RequestToken() =
        use client = new HttpClient()
        client.PostAsync "http://example.com"

        printfn "requestToken"

编辑

根据 cmets 中的要求提供可比的 C# 代码。

var body = "some data";

using (var client = new HttpClient(new HttpClientHandler { UseProxy = false })) {

    var response = await client.PostAsync("https://example.com", new StringContent(body, Encoding.UTF8, "application/xml"));
    var content = await response.Content.ReadAsStringAsync();
}

【问题讨论】:

  • 不清楚你在问什么。你的代码有错误吗?什么错误?还是代码产生的结果与预期不同?它们有何不同?请澄清您的问题。
  • 实际上我需要一个快速开始,我来自 c# 但不知道如何继续上面的代码,我也无法设置接受的标题,request.Headers.Set "Accept" "application/json;charset=UTF-8",你能提供一个完整的例子?
  • 如果您寻求 C# 到 F# 的翻译,请提供相关的 C# 代码。然后有人可以为您翻译。
  • 我很犹豫,因为有一次有人评论说,SO 不是翻译服务,编辑了我的问题。
  • 只要自己努力去做,寻求帮助就可以了。

标签: asynchronous f# httpclient c#-to-f#


【解决方案1】:

对于 F# 异步代码,您需要使用 async 计算表达式和 Async.AwaitTask 将 C# 的 Task<_> 类型转换为 F# 的 Async<_>。我建议您查阅一些有关 F# 异步工作流的文档。

type Authentication = 
    new() = {}
    member this.RequestToken() =
        async {
            use client = new HttpClient()
            let! response = client.PostAsync "http://example.com" |> Async.AwaitTask
            let! content = response.Content.ReadAsStringAsync() |> Async.AwaitTask
            return content
        }

【讨论】:

  • 谢谢,您能帮忙指定内容类型的标题并接受吗?
  • 它有一个错误,上面写着PostAsync doesn't take 1 argument(s), An overload was found taking two arguments
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多