本文共 8501 字,大约阅读时间需要 28 分钟。
在开发过程中,作为开发人员,我们需要多种方式来调用 Web API。这些方式可以是直接使用原生 HTTP 序列化库,或者借助 .NET 框架提供的第三方 HTTP 库。RestSharp 是一个基于 .NET 框架的 REST 客户端工具,它以其轻量级和高效性著称,适合处理 HTTP 请求任务。
RestSharp 是一个强大的 HTTP 客户端工具,主要特点包括:
通过 NuGet 包管理器轻松安装 RestSharp:
PM> Install-Package RestSharp
// 使用默认构造函数var client = new RestClient("https://api.example.com");// 自定义构造函数var client = new RestClient("https://api.example.com", new HttpBasicAuthenticator("username", "password"));
var request = new RestRequest("resource/{id}", Method.POST);request.AddParameter("name", "value");request.AddUrlSegment("id", "123");request.AddObject(new { Id = 123, Name = "Test" });IRestResponse response = client.Execute(request);// 获取响应内容var content = response.Content;// 反序列化为对象var deserialized = response.Data;
var request = new RestRequest("resource/{id}", Method.POST){ AddObject(new { Id = 123, Name = "Test" })};IRestResponse response = await client.ExecuteAsync(request);var result = response.Data;
client.Authenticator = new HttpDigestAuthenticator("username", "password");
public interface IRestSharp{ IRestResponse Execute(IRestRequest request); T Execute(IRestRequest request) where T : new(); RestRequestAsyncHandle ExecuteAsync(IRestRequest request, Action callback);}
public class RestSharpClient : IRestSharp{ private RestClient client; private string BaseUrl { get; set; } private string DefaultDateParameterFormat { get; set; } private IAuthenticator DefaultAuthenticator { get; set; } public RestSharpClient(string baseUrl, IAuthenticator authenticator = null) { BaseUrl = baseUrl; client = new RestClient(BaseUrl); DefaultAuthenticator = authenticator; DefaultDateParameterFormat = "yyyy-MM-dd HH:mm:ss"; if (DefaultAuthenticator != null) { client.Authenticator = DefaultAuthenticator; } } public IRestResponse Execute(IRestRequest request) { request.DateFormat = string.IsNullOrEmpty(request.DateFormat) ? DefaultDateParameterFormat : request.DateFormat; return client.Execute(request); } public T Execute(IRestRequest request) where T : new() { request.DateFormat = string.IsNullOrEmpty(request.DateFormat) ? DefaultDateParameterFormat : request.DateFormat; var response = client.Execute(request); return response.Data; } public RestRequestAsyncHandle ExecuteAsync(IRestRequest request, Action callback) { request.DateFormat = string.IsNullOrEmpty(request.DateFormat) ? DefaultDateParameterFormat : request.DateFormat; return client.ExecuteAsync(request, callback); }}
var client = new RestSharpClient("http://localhost:82/");var result = client.Execute(new RestRequest("api/values", Method.GET));var content = result.Content;
var client = new RestSharpClient("http://localhost:82/");var request = new RestRequest("api/values", Method.POST){ AddObject(new { Name = "Test" })};var response = client.Execute(request);
public static class HttpHelper{ public static T GetApi(int regattaId, string apiName, string pragm = "") { var client = new RestSharpClient($"{SiteConfig.GetSite("Url")}"); var apiNameStr = string.Format($"{SiteConfig.GetSite($"{apiName}")}", regattaId); var request = string.IsNullOrEmpty(pragm) ? new RestRequest(apiNameStr, Method.GET) : new RestRequest($"{apiNameStr}/{pragm}", Method.GET); if (request.StatusCode != HttpStatusCode.OK) { return (T)Convert.ChangeType(request.ErrorMessage, typeof(T)); } T result = (T)Convert.ChangeType(request.Content, typeof(T)); return result; } public static T PostApi (int regattaId, int id, string url, string alias) { var client = new RestClient($"{url}"); IRestRequest request = new RestRequest(); request.Method = Method.POST; request.AddHeader("Accept", "application/json"); request.RequestFormat = DataFormat.Json; request.AddBody(new { UserId = id, Url = url, Alias = alias, Count = 1 }); var result = client.Execute(request); if (result.StatusCode != HttpStatusCode.OK) { return (T)Convert.ChangeType(result.ErrorMessage, typeof(T)); } T response = (T)Convert.ChangeType(result.Content, typeof(T)); return response; }}
// GETvar notificationList = HttpHelper.GetApi(regattaId, "notification");// POSTvar result = HttpHelper.PostApi (regattaId, id, url, alias);
[Route("{regattaId}/[controller]")][HttpGet]public async TaskGetNotifications(int regattaId){ return await _notificationServices.GetNotifications(regattaId);}
[Route("{regattaId}/pageviews")][HttpPost]public async Task PostInfo(int regattaId, [FromBody] PageViewsDto pageViewsDto){ await _pageviewServices.InsertPostInfo(regattaId, pageViewsDto);}
public class PageViewsDto{ public int Id { get; set; } public string Url { get; set; } public string Alias { get; set; } public string UserId { get; set; } public int Count { get; set; } public PageViewsDto() { Id = 0; Count = 1; }}
public async Task UpdateUser(PersonModel model){ var url = $"{SiteConfig.GetSite("Url")}{SiteConfig.GetSite("updateUserByAccount")}"; var resultDetil = await HttpUtil.PostResultAsync(model, url); return resultDetil;}
public static class HttpUtil{ public static async TaskPostResultAsync (object obj, string url) { var setting = new JsonSerializerSettings(); setting.Converters.Add(new StringEnumConverter()); setting.NullValueHandling = NullValueHandling.Ignore; var retdata = await HttpPostAsync(url, JsonConvert.SerializeObject(obj, setting)); return JsonConvert.DeserializeObject (retdata); } private static async Task HttpPostAsync(string url, string postData, string certPath = "", string certPwd = "") { var request = CreateJsonRequest(url, HttpMethod.POST, postData, certPath, certPwd); return await GetResponseStringAsync(request); } private static HttpWebRequest CreateJsonRequest(string url, HttpMethod method, string postData = "", string certpath = "", string certpwd = "") { var request = (HttpWebRequest)WebRequest.Create(url); request.Method = method.ToString(); request.ContentType = "application/json; charset=utf-8"; request.Accept = "*/*"; request.Timeout = 15000; request.AllowAutoRedirect = false; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((a, b, c, d) => true); if (!string.IsNullOrEmpty(certpath) && !string.IsNullOrEmpty(certpwd)) { X509Certificate2 cer = new X509Certificate2(certpath, certpwd, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet); request.ClientCertificates.Add(cer); } if (method == HttpMethod.POST) { using (var sw = new StreamWriter(request.GetRequestStream())) { sw.Write(postData); } } return request; } private static async Task GetResponseStringAsync(HttpWebRequest request) { using (var response = await request.GetResponseAsync() as HttpWebResponse) { using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { return reader.ReadToEnd(); } } }}
RestSharp 是一个强大的 HTTP 客户端工具,适用于调用 RESTful Web 服务。通过 RestSharp,我们可以轻松地发送各种 HTTP 请求,并处理响应数据。通过自定义的接口和类,我们可以将 REST 调用嵌入到日常的开发工作中,提高开发效率。
转载地址:http://rnrfk.baihongyu.com/