2016-12-30 261 views
8

我已经通过http://restsharp.org/代码,这很好用。下面是带有asp.net内核的RestSharp的代码。如何在asp.net核心中使用RestSharp.NetCore

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

回答

-1

您可以使用FubarCoder.RestSharp.Portable.HttpClient这是由业主某种RestSharp端口PCL的”把它称为面向.NET标准(所以它的工作原理。 .NET的核心)。

FubarCoder.RestSharp.Portable.HttpClient on NuGet

+0

我想用RestSharp.NetCore ...... –

+0

的问题已经为RestSharp.NetCore具体要求,就这样吧。回应它已经坏了/不能用/等等,然后**也许**推荐另外一件事,如果你真的觉得自己有兴趣做广告...... OTOH。只是推荐像你这样做的另一件事就像对“如何在C#中做Foo?”的Q&A一样没有帮助? - “重新:使用Java代替”。 – quetzalcoatl

5

有一个现有的StackOverflow的问题,例如,关于RestSharp.NetCore呼吁ExecuteAsync

ExecuteAsyncPost Example in RestSharp.NetCore

引用RestSharp.NetCore 105.2.3Newtonsoft.Json 9.0.2-β2当我成功地使用的例子。

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滑稽动作的回答,创建一个扩展类:

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

您还可以创建扩展方法解析响应:

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

如下现在,您可以使用它返回强类型等等。

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 /异步模式,并且被'.Result'隐式地等待。 – quetzalcoatl

+0

在我的情况下,我想要一个同步版本,因此我实际上阻止,直到我得到一个结果。如果我想要异步版本,那么我会简单地使用构建到框架中的ExecuteAsync()方法。我想你误解了我的用例。 – bkorzynski

+0

您能详细说明“损坏”吗?如果我说的是错的,那么我想解决它,以便它可以帮助别人。 – bkorzynski