RestSharp 异步 PUT
RestSharp asynchronous PUT
有一个应用程序,API 可以访问数据库,还有一个应用程序使用 RestSharp 调用 API。
我实现了 RestSharp 的所有异步方法以通用工作。所以GET,POST,DELETE都是working.The只有一个我不能去工作的是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
:)
有一个应用程序,API 可以访问数据库,还有一个应用程序使用 RestSharp 调用 API。 我实现了 RestSharp 的所有异步方法以通用工作。所以GET,POST,DELETE都是working.The只有一个我不能去工作的是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
:)