簡體   English   中英

HTTPClient POST方法C#

[英]HTTPClient POST method c#

我猜這已經被問了一百萬遍了,但是我無法弄清楚這些東西是如何工作的。 我的應用程序在針對框架4.0的C#中。 我嘗試做一個簡單的POST,但是我的POST甚至都不會被觸發,而不是C#。 它確實是由一個類似以下內容的簡單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是自定義PSObjects的數組。 因此,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

編輯::等待給我一個編譯錯誤:“等待”運算符只能在異步方法中使用。 考慮使用“異步”修飾符標記該方法,並將其返回類型更改為“任務”。

如果有人能解釋這意味着什么,太好了! 真的不知道

但這似乎也可以解決它:

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;

await關鍵字只能在以async關鍵字修飾的方法中使用,例如:

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

在這方面,使用await有點病毒-它要求直到根的所有調用方法都被標記為異步。 至於為什么存在異步,請參見關於主題的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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM