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 :)