2016-08-15 6 views
1

Я пишу следующий код для публикации в веб-API. Однако я получил ошибку компилятора в строке client.PostAsJsonAsync. Сообщение об ошибкеОпубликовать в Restful api?

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

код:

[<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 } 

Какой самый лучший способ справиться с RESTful API в F #? Я использую Fsharp.Data.

ответ

5

Похоже, вам нужно использовать Async.AwaitTask:

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

Или с помощью |> оператора:

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

Если у вас уже есть ссылка F # Data, вы также можете сделать это с помощью F# Data HTTP utilities , который предоставляет API-интерфейс F # для поддержки HTTP-запросов.

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

F # Данные не будут автоматически сериализовать данные для вас, хотя, так что недостаток использования этого утилита является то, что вам нужно сериализовать данные в явном виде, прежде чем сделать запрос.

Смежные вопросы