如何在asp.net核心中使用RestSharp.NetCore

San*_*isy 18 c# restsharp asp.net-core-mvc asp.net-core

我已经浏览了http://restsharp.org/代码,这些代码很有用.下面是带有asp.net核心的RestSharp的代码.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码对我很有用.现在我想在asp.net核心中实现相同的代码.

我可以获得一个示例如何在asp.net核心中使用RestSharp.我添加了依赖项RestSharp.NetCore":105.2.3.

Ale*_*rev 35

RestSharp v106支持.NET Standard,因此您的代码无需更改即可运行.

RestSharp.NetCorepackage不是来自RestSharp团队,我们不支持.它也没有被更新,并且所有者不对消息做出响应,也没有发布包的源代码.


gld*_*ael 19

添加到Antwone Antics的答案,创建一个扩展类:

public static class RestClientExtensions
{
    public static async Task<RestResponse> ExecuteAsync(this RestClient client, RestRequest request)
    {
        TaskCompletionSource<IRestResponse> taskCompletion = new TaskCompletionSource<IRestResponse>();
        _ = client.ExecuteAsync(request, r => taskCompletion.SetResult(r));
        return (RestResponse)(await taskCompletion.Task);
    }
}
Run Code Online (Sandbox Code Playgroud)

您现在可以按如下方式使用它:

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);
Run Code Online (Sandbox Code Playgroud)

您还可以创建扩展方法来解析响应以返回强类型等.

  • client.ExecuteAsync不接受只有一个参数 (2认同)

小智 6

现有的StackOverflow问题和示例在RestSharp.NetCore 上调用ExecuteAsync.

RestSharp.NetCore中的ExecuteAsyncPost示例

我在使用Newtonsoft.Json 9.0.2-beta2引用RestSharp.NetCore 105.2.3时成功使用了该示例.

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);
}
Run Code Online (Sandbox Code Playgroud)