web-dev-qa-db-ja.com

Xamarin Forms C#でHTTP Postリクエストを送信する

始める前に、私はこの問題の解決策をグーグルで調べましたが、それらを理解していない(私は初心者です)か、動作しません。

私がやりたいのは、localhost:8000上のREST APIにJSONデータを次の形式で送信することです。

{
    "username" : "myusername",
    "password" : "mypass"
}

次に、次のような文字列トークンを保持する応答が必要です。

{
    "token" : "rgh2ghgdsfds"
}

JSONデータを送信し、応答からトークンを解析するにはどうすればよいですか?私はこれを行う同期方法を見てきましたが、何らかの理由で、それらは動作しません(または単にそれがどの名前空間にあるのかわからないため)。これを行う非同期方法を適用する場合、それがどのように機能するか説明していただけますか?

前もって感謝します。

10
alexcons

HttpClient を使用します。簡単な例:

var client = new HttpClient();
client.BaseAddress = new Uri("localhost:8080");

string jsonData = @"{""username"" : ""myusername"", ""password"" : ""mypassword""}"

var content = new StringContent (jsonData, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync("/foo/login", content);

// this result string should be something like: "{"token":"rgh2ghgdsfds"}"
var result = await response.Content.ReadAsStringAsync();

どこ "/foo/login"は、HTTPリソースを指す必要があります。たとえば、AccountControllerメソッドとLoginがある場合、代わりに"/foo/login"あなたは"/Account/Login"

ただし、一般に、シリアル化と逆シリアル化を処理するには、 Json.Net のようなツールを使用することをお勧めします。

それがどのように機能するかについての質問に関しては、ここで多くのことが行われています。 async/awaitの仕組みについて質問がある場合は、 MSDNのAsyncとAwaitを使用した非同期プログラミング を読むことをお勧めします。

14
Jacob Shanley