2016-12-30 3 views
8

Я прошел через код http://restsharp.org/, который отлично работает. Ниже приведен код RestSharp с ядром asp.net.Как использовать RestSharp.NetCore в ядре 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; 
    } 
} 

Этот код отлично подходит для меня. Теперь я хочу реализовать тот же код в ядре asp.net.

Могу ли я получить пример примера использования RestSharp в ядре asp.net. Я добавил зависимость RestSharp.NetCore ":. 105.2.3

ответ

-1

Вы можете использовать FubarCoder.RestSharp.Portable.HttpClient, который называется владельцем„какой-то RestSharp порт для PCL“Он нацелен на .NET Standard (так это работает. на .NET Ядра).

См FubarCoder.RestSharp.Portable.HttpClient on NuGet.

+0

Я хочу использовать RestSharp.NetCore ... .... –

+0

вопрос был конкретный запрос на RestSharp.NetCore, так и будет. Ответьте, что он сломан/непригоден/и т. Д., А затем ** может ** рекомендовать другую вещь, если вы действительно чувствуете желание рекламировать ... OTOH. только рекомендуя другую вещь, как вы сделали, так же бесполезно, как Q & A «как сделать Foo на C#?» - "re: использовать Java вместо". – quetzalcoatl

5

Там в существующий StackOverflow вопрос и пример, который вызывает ExecuteAsync на RestSharp.NetCore.

ExecuteAsyncPost Example in RestSharp.NetCore

я успешно использовал этот пример, когда ссылки RestSharp.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); 
} 
+0

, пожалуйста, напишите ответ, шаги, которые необходимо выполнить. затем ссылка – Sachith

+0

Я сделал это на один шаг дальше и создал для него метод расширения. (Смотри ниже). – bkorzynski

12

Добавление ответа Antwone выходками, создайте класс расширения:

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

Вы также можете создать методы расширения, которые анализирует ответ чтобы вернуть сильный тип и т. д.

6

RestSharp v106 поддерживает стандарт .NET, поэтому ваш код должен работать без изменений.

RestSharp.NetCore упаковка не из команды RestSharp и не поддерживается нами. Он также не обновляется, и владелец не отвечает на сообщения, ни исходный код пакета не публикуется.

-1

Я создал из него метод расширения (см. Выше комментарий для контекста).

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

теперь я могу использовать его использовать в качестве var response = restClient.Execute(request);

+0

Это вздор. Поврежденная копия ответа ** gldraphael **. Я говорю «копировать», потому что это действительно так и «повреждено», потому что он отбрасывает шаблон Task/async и неявно ждет «.Result». – quetzalcoatl

+0

В моем случае мне нужна синхронная версия, поэтому я фактически блокирую, пока не получу результат.Если бы я хотел асинхронную версию, я бы просто использовал метод ExecuteAsync(), встроенный в структуру. Я думаю, вы неправильно поняли мой вариант использования. – bkorzynski

+0

Можете ли вы подробнее рассказать о «поврежденном»? Если то, что я сказал, было неправильным, тогда я хотел бы исправить это, чтобы он помог кому-то другому. – bkorzynski

Смежные вопросы