[英]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.