簡體   English   中英

RestSharp異步PUT

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

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