web-dev-qa-db-ja.com

asp.netコアでRestSharp.NetCoreを使用する方法

私は http://restsharp.org/ のすばらしいコードを試しました。以下は、asp.netコアを使用しないRestSharpのコードです。

public GenericResponseObject<T> GetGeneric<T>(string operation, params KeyValuePair<string, string>[] nameValues) where T : class
{
    RestClient client = new RestClient(_baseUrl)
    {
        Authenticator = new HttpBasicAuthenticator(_username, _password)
    };

    RestRequest request = new RestRequest(operation, Method.GET);

    foreach (KeyValuePair<string, string> nameValue in nameValues)
    {
        request.AddQueryParameter(nameValue.Key, nameValue.Value);
    }

    IRestResponse<GenericResponseObject<T>> response = client.Execute<GenericResponseObject<T>>(request);
        GenericResponseObject<T> responseObject = response.Data;
        return responseObject;
    }
}

このコードは、私にとってはうまく機能します。次に、asp.netコアに同じコードを実装します。

Asp.netコアでRestSharpを使用する方法のサンプルを入手できますか。依存関係RestSharp.NetCore ":105.2.3を追加しました。

18
San Jaisy

RestSharp v106は.NET Standardをサポートしているため、コードは変更なしで機能します。

RestSharp.NetCoreパッケージはRestSharpチームのものではなく、当社ではサポートされていません。また、更新されておらず、所有者はメッセージに応答していません。パッケージのソースコードも公開されていません。

31
Alexey Zimarev

Antwone Anticsの答えに追加して、拡張クラスを作成します。

public static class RestClientExtensions
{
    public static async Task<RestResponse> ExecuteAsync(this RestClient client, RestRequest request)
    {
        TaskCompletionSource<IRestResponse> taskCompletion = new TaskCompletionSource<IRestResponse>();
        RestRequestAsyncHandle handle = client.ExecuteAsync(request, r => taskCompletion.SetResult(r));
        return (RestResponse)(await taskCompletion.Task);
    }
}

次のように使用できます。

var client = new RestClient(BASE_URL);
var request = new RestRequest();
// do whatever else you want/need to, to the request
// ...

// ... and use it like we used to
var response = await client.ExecuteAsync(request);

また、応答を解析して強い型などを返す拡張メソッドを作成することもできます。

18
gldraphael

既存のStackOverflowの質問と、RestSharp.NetCoreでExecuteAsyncを呼び出す例があります。

RestSharp.NetCoreのExecuteAsyncPostの例

RestSharp.NetCore 105.2.3Newtonsoft.Json 9.0.2-beta2

using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using RestSharp;

public async Task<SomeObject> TestPost(ObjectFoo foo)
{
    JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings { 
    ContractResolver = new CamelCasePropertyNamesContractResolver() 
    };

    RestClient restClient = new RestClient(API_URL);

    RestRequest request = new RestRequest("SOME_METHOD", Method.POST);
    request.AddHeader("Accept", "application/json");

    string jsonObject = JsonConvert.SerializeObject(foo, Formatting.Indented, jsonSerializerSettings);
    request.AddParameter("application/json", jsonObject, ParameterType.RequestBody);

    TaskCompletionSource<IRestResponse> taskCompletion = new TaskCompletionSource<IRestResponse>();

    RestRequestAsyncHandle handle = restClient.ExecuteAsync(
        request, r => taskCompletion.SetResult(r));

    RestResponse response = (RestResponse)(await taskCompletion.Task);

    return JsonConvert.DeserializeObject<SomeObject>(response.Content);
}
6
Antwone Antics