C# RestSharp應用


C# RestSharp應用

開通博客是想將自己所學的東西記錄下來,以便自己查缺補漏,希望自己能堅持下去

正題關於RestSharp的使用

  1. 下載
    NuGet直接搜索即可,最新版本RestSharp需要.net framework 4.5.2及以上支持
  2. Json序列化工具:Newtonsoft.Json,直接由NuGet下載
  3. 官網說明:
var client = new RestClient("http://example.com");
// client.Authenticator = new HttpBasicAuthenticator(username, password);

var request = new RestRequest("resource/{id}");
request.AddParameter("name", "value"); // adds to POST or URL querystring based on Method
request.AddUrlSegment("id", "123"); // replaces matching token in request.Resource

// add parameters for all properties on an object
request.AddJsonObject(@object);

// or just whitelisted properties
request.AddObject(object, "PersonId", "Name", ...);

// easily add HTTP Headers
request.AddHeader("header", "value");

// add files to upload (works with compatible verbs)
request.AddFile("file", path);

// execute the request
var response = client.Post(request);
var content = response.Content; // raw content as string

// or automatically deserialize result
// return content type is sniffed but can be explicitly set via RestClient.AddHandler();
var response2 = client.Post<Person>(request);
var name = response2.Data.Name;

// or download and save file to disk
client.DownloadData(request).SaveAs(path);

// easy async support
await client.ExecuteAsync(request);

// async with deserialization
var asyncHandle = client.PostAsync<Person>(request, response => {
    Console.WriteLine(response.Data.Name);
});

// abort the request on demand
asyncHandle.Abort(); 
  1. 寫一個工具類
public class RestSharpApiUtil
    {
        #region 暴露執行方法
        /// <summary>
        /// 組裝Client,Request,並執行Http請求
        /// </summary>
        /// <typeparam name="T">返回值類型</typeparam>
        /// <param name="baseUrl">基地址</param>
        /// <param name="relativeUrl">相對地址</param>
        /// <param name="method">請求類型</param>
        /// <param name="lstParam">Get/Put/Delete/Post等參數</param>
        /// <param name="obj">post請求體</param>
        /// <returns></returns>
        public static ResponseMessage<T> RestAction<T>(string baseUrl, string relativeUrl, Method method=Method.GET,List<RestParam> lstParam=null)
        {
            var client = new RestClient(baseUrl);
            return RestMethod<T>(client, InstallRequest(relativeUrl,method,lstParam));
        }

        /// <summary>
        /// 異步請求無返回值
        /// </summary>
        /// <param name="baseUrl"></param>
        /// <param name="relativeUrl"></param>
        /// <param name="method"></param>
        /// <param name="lstParam"></param>
        /// <param name="obj"></param>
        public static void RestActionNoResponseAsync(string baseUrl, string relativeUrl, Method method = Method.GET, List<RestParam> lstParam = null)
        {
            var client = new RestClient(baseUrl);
            RestMethodWithOutReturnAsync(client, InstallRequest(relativeUrl, method, lstParam));
        }

        #endregion

        #region 底層調用,並不暴露方法
        /// <summary>
        /// Http請求
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="client"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        static ResponseMessage<T> RestMethod<T>(RestClient client, RestRequest request)
        {
            RestResponse restResponse = (RestResponse)client.Execute(request);
            try
            {
                return restResponse == null ? new ResponseMessage<T>() :
                    string.IsNullOrWhiteSpace(restResponse.Content) ? new ResponseMessage<T>() :
                    JsonConvert.DeserializeObject<ResponseMessage<T>>(restResponse.Content);
            }
            catch (Exception ex)
            {
                return new ResponseMessage<T>() { success = false };
            }
        }

        /// <summary>
        /// 無返回值異步調用
        /// </summary>
        /// <param name="client"></param>
        /// <param name="request"></param>
        static void RestMethodWithOutReturnAsync(RestClient client, RestRequest request)
        {
            RestResponse restResponse;
            var asyncHandle = client.ExecuteAsync(request, response =>
            {
                restResponse = (RestResponse)response;
            });
            asyncHandle.Abort();
        }

        /// <summary>
        /// 組裝Request
        /// </summary>
        /// <param name="relativeUrl"></param>
        /// <param name="method"></param>
        /// <param name="lstParam"></param>
        /// <returns></returns>
        static RestRequest InstallRequest(string relativeUrl, Method method = Method.GET, List<RestParam> lstParam = null)
        {
            var request = new RestRequest(relativeUrl, method);
            if (lstParam != null)
            {
                foreach (RestParam p in lstParam)
                {
                    switch (p.ParamType)
                    {
                        case EmParType.UrlSegment:
                            request.AddUrlSegment(p.Key, p.Value);
                            break;
                        case EmParType.Param:
                            request.AddParameter(p.Key, p.Value);
                            break;
                        case EmParType.Body:
                            request.AddJsonBody(p.Value);
                            break;
                        default:
                            break;
                    }
                }
            }
            return request;
        }
        #endregion

    } 

其中用到兩個類:ResponseMessage:返回值實體,根據自己的業務組裝即可
RestParam:參數實體以及參數類型

  轉自:https://blog.csdn.net/dengzitui/article/details/88715385


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM