1

これは何百万回も尋ねられたと思いますが、どのように機能するのかわかりません。私のアプリはフレームワーク 4.0 に対して c# です。簡単な POST を実行しようとしましたが、C# からではなく、POST がトリガーされません。次のような単純な PowerShell に相当するものによってトリガーされます。

$uri="http://localhost:50554/api/pinfo/?sendmessage=yes&message=yep&killprocess=yes&timeout=20"
Invoke-RestMethod -uri $uri -Method Post -Body @($apso | ConvertTo-Json) -ContentType "application/json; charset=utf-8"

$apso はカスタム PSObject の配列です。したがって、POST メソッドは機能し、使用可能です。したがって、C#では次のようにします。

// this needs to be POSTed
PInfo pi = new PInfo();
pi.computername="test";
pi.username="test";
pi.PID="1234";
List<PInfo> lpi=new List<PInfo>();
lpi.Add(pi);

//Invoke the POST
HttpClient client = new HttpClient();

client.BaseAddress = new Uri("http://localhost:50554/");
var a = client.PostAsync("api/pinfo/?sendmessage=yes&message=tralala&killprocess=no&timeout=20", new StringContent(lpi.ToString(), System.Text.Encoding.UTF8, "application/json"))
             .ContinueWith((postTask) => postTask.Result.EnsureSuccessStatusCode());

しかし、それは同じ POST をトリガーしませんか? 私がここで見逃しているアイデアはありますか?

BR、ロナルド

Edit:: await でコンパイル エラーが発生します。「await」演算子は非同期メソッド内でのみ使用できます。このメソッドを 'async' 修飾子でマークし、その戻り値の型を 'Task' に変更することを検討してください。

誰かがそれが何を意味するのか説明できれば、素晴らしいです! 本当にわかりません。

しかし、これも解決するようです:

PInfo p = new PInfo();
p.username = "test";
p.computername = "test";
p.PID = "test";
List<PInfo> testlist = new List<PInfo>();
testlist.Add(p);

client.BaseAddress = new Uri ("http://localhost:50554");

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

HttpResponseMessage result = client.PostAsJsonAsync(url, testlist).Result;

string resultContent = result.Content.ReadAsStringAsync().Result;
4

1 に答える 1

1

await キーワードは、async キーワードで装飾されたメソッドでのみ使用できます。

private async void button_click(object sender, EventArgs e) {
    var foo = await SomeMethodAsync(...);
}

この点で、await の使用は少しバイラルです。ルートまでのすべての呼び出しメソッドを非同期としてマークする必要があります。async が存在する理由については、件名に関するこの SO の質問を参照してください。

この API を使用する別の方法を発見しました。これらの新しいスタイルの Async メソッドは、結果がある場合は Task を返し、結果がない場合は Task のみを返します。この場合、次のようにすることもできます。

Task<HttpResponseMessage> task = client.PostAsync("api/pinfo/?sendmessage=yes&message=tralala&killprocess=no&timeout=20", new StringContent(lpi.ToString(), System.Text.Encoding.UTF8, "application/json"));

HttpResponseMessage response = task.Result;
于 2013-09-05T13:57:39.927 に答える