2016-08-15 2 views
1

私はWeb APIに投稿するために次のコードを書いています。しかし、私はclient.PostAsJsonAsyncの行にコンパイルエラーがあります。安らかなAPIに投稿しますか?

[<CLIMutable>] 
type Model = { ..... } 

let PostIt params = async { 
    use client = new HttpClient() 
    let content = { ..... } // a Model built from params 
    let! response = client.PostAsJsonAsync("http://...", content) // Error! 
    return response } 

F#でRESTfulなAPIを処理するための最良の方法は何ですか:エラーメッセージが

Error  This expression was expected to have type 
    Async<'a>  
but here has type 
    Tasks.Task<HttpResponseMessage> 

コードですか?私はFsharp.Dataを使用しています。

答えて

5

あなたがAsync.AwaitTaskを使用する必要があるように思え:

let! response = Async.AwaitTask (client.PostAsJsonAsync("http://...", content)) 

それとも|>演算子使用:

let! response = client.PostAsJsonAsync("http://...", content) |> Async.AwaitTask 
4

をすでにF#のデータの参照を持っている場合は、あなたもF# Data HTTP utilitiesを使用してこれを行うことができますHTTPリクエストを作成するためのF#に親しみやすいAPIを提供します。

async { 
    let! response = 
    Http.AsyncRequest 
     ("http://httpbin.org/post", httpMethod = "POST", 
     headers = [ ContentType HttpContentTypes.Json ], 
     body = TextRequest """ {"test": 42} """) 
    return response } 

F#のデータは、自動的にかかわらず、あなたのためのデータをシリアル化しないので、これらのユーティリティを使用しての欠点は、あなたが要求を行う前に、明示的にデータをシリアル化する必要がありますということです。

関連する問題