Comment utiliser RestSharp.NetCore in asp.net noyau

je suis passé par le http://restsharp.org/ code du travail de grands noms. Ci-dessous est le code de RestSharp avec out asp.net noyau .

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;
    }
}

Ce code fonctionne très bien pour moi. Maintenant je veux implémenter le même code dans asp.net noyau.

puis-je obtenir un exemple comment utiliser RestSharp dans asp.net noyau. J'ai ajouté la dépendance RestSharp.NetCore": 105.2.3.

13
demandé sur hbulens 2016-12-30 07:31:33

4 réponses

ajouter à la réponse D'Antwone Antitics, créer une classe extension:

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);
    }
}

Vous pouvez maintenant l'utiliser comme suit:

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

vous pouvez aussi créer des méthodes d'extension qui parsèment la réponse pour retourner un type fort et ainsi de suite.

15
répondu gldraphael 2017-05-28 18:04:41

RestSharp v106 prend en charge le Standard.Net pour que votre code fonctionne sans changement.

RestSharp.NetCore package n'est pas de L'équipe RestSharp et n'est pas supporté par nous. Il n'est pas non plus mis à jour et le propriétaire ne répond pas sur les messages, ni le code source du paquet n'est publié.

15
répondu Alexey Zimarev 2017-11-08 15:55:55

il existe une question et un exemple de débordement de piles qui appelle ExecuteAsync sur Repossharp.NetCore.

ExecuteAsyncPost exemple dans RestSharp.NetCore

j'ai utilisé avec succès cet exemple en faisant référence à repos.NetCore 105.2.3 Newtonsoft.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
répondu Antwone Antics 2017-05-23 12:25:13

j'ai créé une méthode d'extension (voir commentaire ci-dessus pour le contexte).

public static class RestSharpExtensions { public static RestResponse Execute(this IRestClient client, IRestRequest request) { var taskCompletion = new TaskCompletionSource(); client.ExecuteAsync(request, r => taskCompletion.SetResult(r)); return (RestResponse)(taskCompletion.Task.Result); } }

maintenant, je peux utiliser var response = restClient.Execute(request);

-5
répondu bkorzynski 2017-11-21 09:39:02