[英]RestSharp asynchronous PUT
有一個應用程序,即具有訪問數據庫權限的API和一個使用RestSharp調用該API的應用程序。 我實現了RestSharp的所有異步方法來正常工作。 所以GET,POST,DELETE都可以使用,我唯一無法使用的就是PUT。
首先,這是我的控制器PUT:
[HttpPut("{id}")]
public void Put(int id, [FromBody]ApplicationUser value)
{
string p = value.Email;
}
這是我的方法:
public Task<bool> PutRequestContentAsync<T>(string resource, object id, T resourceObject) where T : new()
{
RestClient client = new RestClient("http://localhost:54008/api/");
RestRequest request = new RestRequest($"{resource}/{{id}}", Method.PUT);
request.AddUrlSegment("id", id);
request.AddObject(resourceObject);
var tcs = new TaskCompletionSource<bool>();
var asyncHandler = client.ExecuteAsync<T>(request, r =>
{
tcs.SetResult(r.ResponseStatus == ResponseStatus.Completed);
});
return tcs.Task;
}
這是我在視圖中的調用(所有其他GET,...調用都工作正常):
bool putOk = await new RepositoryCall()
.PutRequestContentAsync("Values", 2,
new ApplicationUser {
Email="test@xxxxxxx.de"
}
);
通過調試,響應狀態已Completed
但從未調用PUT。
知道可能是什么問題嗎?
所以最后我自己得到了答案...(昨天坐了6個小時,沒有結果,今天又坐了一個小時,就可以了)
public Task<bool> PutRequestContentAsync<T>(string resource, object id, T resourceObject) where T : new()
{
RestClient client = new RestClient("http://localhost:54008/api/");
RestRequest request = new RestRequest($"{resource}/{{id}}", Method.PUT);
request.AddUrlSegment("id", id);
request.RequestFormat = DataFormat.Json;
request.AddBody(resourceObject);
var tcs = new TaskCompletionSource<bool>();
var asyncHandler = client.ExecuteAsync<T>(request, (response) => {
tcs.SetResult(response.ResponseStatus == ResponseStatus.Completed);
});
return tcs.Task;
}
訣竅是添加一個RequestFormat並將AddObject
更改為AddBody
:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.