web-dev-qa-db-fra.com

Comment utiliser RestSharp.NetCore dans le noyau asp.net

J'ai parcouru le code http://restsharp.org/ qui fonctionne très bien. Ci-dessous, le code de RestSharp avec notre noyau asp.net.

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 le noyau asp.net.

Puis-je obtenir un exemple d'exemple sur la façon d'utiliser RestSharp dans le noyau asp.net. J'ai ajouté la dépendance RestSharp.NetCore ": 105.2.3 .

18
San Jaisy

RestSharp v106 prend en charge la norme .NET afin que votre code fonctionne sans modifications.

RestSharp.NetCore le package ne provient pas de l'équipe RestSharp et n'est pas pris en charge par nous. Il n'est pas non plus mis à jour et le propriétaire ne répond pas aux messages, ni le code source du package n'est publié.

31
Alexey Zimarev

En ajoutant à la réponse d'Antwone Antics, créez une classe d'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 également créer des méthodes d'extension qui analysent la réponse pour renvoyer un type fort, etc.

18
gldraphael

Il existe une question StackOverflow et un exemple qui appellent ExecuteAsync sur RestSharp.NetCore.

Exemple ExecuteAsyncPost dans RestSharp.NetCore

J'ai utilisé cet exemple avec succès lors du référencement RestSharp.NetCore 105.2.3 avec 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
Antwone Antics