2016-12-30 21 views
8

Przeszedłem kod http://restsharp.org/, który działa świetnie. Poniżej znajduje się kod RestSharp z rdzeniem asp.net.Jak korzystać z RestSharp.NetCore w rdzeniu 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; 
    } 
} 

Kod ten działa doskonale dla mnie. Teraz chcę zaimplementować ten sam kod w rdzeniu asp.net.

Czy mogę uzyskać przykładowy przykład użycia RestSharp w rdzeniu asp.net. Dodałem zależność RestSharp.NetCore ". 105.2.3

Odpowiedz

-1

Można użyć FubarCoder.RestSharp.Portable.HttpClient która jest wywoływana przez właściciela«jakiegoś portu RestSharp do PCL»To jest kierowana .NET Standard (tak to działa. na .NET rdzenia).

Zobacz FubarCoder.RestSharp.Portable.HttpClient on NuGet.

+0

chcę użyć RestSharp.NetCore ... .... –

+0

Pytanie miał konkretny wniosek o RestSharp.NetCore, niech tak będzie. Odpowiedz, że jest zepsuty/nie nadaje się do użytku/itd., A następnie ** może ** poleca inną rzecz, jeśli naprawdę chcesz się reklamować ... OTOH. tylko polecanie innej rzeczy, takiej jak ty, jest tak samo pomocne, jak pytania i odpowiedzi dotyczące "jak zrobić Foo in C#?" - "ponownie: użyj Java zamiast". – quetzalcoatl

5

jest istniejący pytanie StackOverflow i przykład, który nazywa ExecuteAsync na RestSharp.NetCore.

ExecuteAsyncPost Example in RestSharp.NetCore

z powodzeniem stosowany, gdy ten przykład odniesienie RestSharp.NetCore 105.2.3 z 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); 
} 
+0

proszę zamieścić odpowiedź, kroki, których należy przestrzegać. następnie odniesienie – Sachith

+0

Wziąłem go o krok dalej i stworzyłem dla niego metodę rozszerzenia. (Patrz poniżej). – bkorzynski

12

Dodawanie do odpowiedzi Antwone wybryki, należy utworzyć klasę rozszerzenia:

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

można teraz używać go w sposób następujący:

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

Można również utworzyć metody rozszerzenie, które analizuje odpowiedź zwrócić silny typ i tak dalej.

6

RestSharp v106 obsługuje standard .NET, więc Twój kod powinien działać bez zmian.

RestSharp.NetCore pakiet nie pochodzi z zespołu RestSharp i nie jest obsługiwany przez nas. Nie jest również aktualizowany, a właściciel nie odpowiada na wiadomości, ani kod źródłowy pakietu nie jest publikowany.

-1

Stworzyłem z niego metodę rozszerzenia (patrz powyżej komentarz do kontekstu).

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

teraz mogę używać go używać jako var response = restClient.Execute(request);

+0

To nonsens. Uszkodzona kopia odpowiedzi ** gldraphael **. Mówię "kopiuj", ponieważ tak naprawdę jest i "uszkodzony", ponieważ zrzuca wzorzec Zadanie/asynchronicznie i czeka niejawnie przez '.Result'. – quetzalcoatl

+0

W moim przypadku chciałem wersji synchronicznej, dlatego faktycznie blokuję, dopóki nie otrzymam wyniku.Jeśli chciałbym wersji async, po prostu użyłbym metody ExecuteAsync(), która jest wbudowana w strukturę. Myślę, że źle zrozumiałeś mój przypadek użycia. – bkorzynski

+0

Czy możesz rozwinąć więcej na temat "uszkodzony"? Jeśli to, co powiedziałem, było złe, to chciałbym to naprawić, aby mogło pomóc komuś innemu. – bkorzynski