zoukankan      html  css  js  c++  java
  • asp.net webpi 中使用 ClientHelper 发起HTTP请求

    1:nuget 程序集:RestSharp, Version=106.3.1.0, Culture=neutral, PublicKeyToken=598062e77f915f75

    2:类库代码:ClientHelper

    using RestSharp;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace test.Common
    {
        /// <summary>
        /// Http请求操作类
        /// </summary>
        public class ClientHelper
        {
            public RestClient Client { get; set; }
    
            #region
            public ClientHelper() : this("")
            {
            }
    
            public ClientHelper(string baseUrl)
            {
                this.Client = new RestClient(baseUrl);
            }
    
            public ClientHelper(Uri baseUrl)
            {
                this.Client = new RestClient(baseUrl);
            }
    
            public ClientHelper(Uri baseUrl, int timeout)
            {
                this.Client = new RestClient(baseUrl);
                this.Client.Timeout = timeout;
            }
            #endregion
    
            #region Base
            public virtual IRestResponse Execute(IRestRequest request)
            {
                //IRestResponse response = client.Execute(request);
                //var content = response.Content; // raw content as string
                return this.Client.Execute(request);
            }
            public virtual IRestResponse<T> Execute<T>(IRestRequest request) where T : new()
            {
                //IRestResponse<Person> response2 = client.Execute<Person>(request);
                //var name = response2.Data.Name;
                return this.Client.Execute<T>(request);
            }
    
            public virtual RestRequestAsyncHandle ExecuteAsync(IRestRequest request, Action<IRestResponse, RestRequestAsyncHandle> callback)
            {
                //IRestResponse response = client.Execute(request);
                //var content = response.Content; // raw content as string
                return this.Client.ExecuteAsync(request, callback);
            }
            public virtual RestRequestAsyncHandle ExecuteAsync<T>(IRestRequest request, Action<IRestResponse<T>, RestRequestAsyncHandle> callback)
            {
                //var asyncHandle = client.ExecuteAsync<Person>(request, response => {
                //    Console.WriteLine(response.Data.Name);
                //});
                return this.Client.ExecuteAsync<T>(request, callback);
            }
            #endregion
    
            #region 
            public virtual IRestResponse Execute(string resource, Method method, object paramObj = null, IDictionary<string, string> headerObj = null)
            {
                RestRequest request = new RestRequest(resource, method);
    
                RestRequestWithParam(request, method, paramObj);
    
                RestRequestWithHeader(request, headerObj);
    
                return this.Client.Execute(request);
            }
    
            public virtual IRestResponse ExecuteGet(string resource, object paramObj = null, IDictionary<string, string> headerObj = null)
            {
                return this.Execute(resource, Method.GET, paramObj, headerObj);
            }
    
            public virtual IRestResponse ExecutePost(string resource, object paramObj = null, IDictionary<string, string> headerObj = null)
            {
                return this.Execute(resource, Method.POST, paramObj, headerObj);
            }
    
            public virtual IRestResponse ExecutePut(string resource, object paramObj = null, IDictionary<string, string> headerObj = null)
            {
                return this.Execute(resource, Method.PUT, paramObj, headerObj);
            }
    
            public virtual IRestResponse ExecuteDelete(string resource, object paramObj = null, IDictionary<string, string> headerObj = null)
            {
                return this.Execute(resource, Method.DELETE, paramObj, headerObj);
            }
    
            public virtual IRestResponse<T> Execute<T>(string resource, Method method, object paramObj = null, IDictionary<string, string> headerObj = null) where T : new()
            {
                RestRequest request = new RestRequest(resource, method);
    
                RestRequestWithParam(request, method, paramObj);
    
                RestRequestWithHeader(request, headerObj);
    
                return this.Client.Execute<T>(request);
            }
    
            public virtual IRestResponse<T> ExecuteGet<T>(string resource, object paramObj = null, IDictionary<string, string> headerObj = null) where T : new()
            {
                return this.Execute<T>(resource, Method.GET, paramObj, headerObj);
            }
    
            public virtual IRestResponse<T> ExecutePost<T>(string resource, object paramObj = null, IDictionary<string, string> headerObj = null) where T : new()
            {
                return this.Execute<T>(resource, Method.POST, paramObj, headerObj);
            }
    
            public virtual IRestResponse<T> ExecutePut<T>(string resource, object paramObj = null, IDictionary<string, string> headerObj = null) where T : new()
            {
                return this.Execute<T>(resource, Method.PUT, paramObj, headerObj);
            }
    
            public virtual IRestResponse<T> ExecuteDelete<T>(string resource, object paramObj = null, IDictionary<string, string> headerObj = null) where T : new()
            {
                return this.Execute<T>(resource, Method.DELETE, paramObj, headerObj);
            }
    
            public virtual RestRequestAsyncHandle ExecuteAsync(string resource, Method method, Action<IRestResponse, RestRequestAsyncHandle> callback, object paramObj = null, IDictionary<string, string> headerObj = null)
            {
                //IRestResponse response = client.Execute(request);
                //var content = response.Content; // raw content as string
                RestRequest request = new RestRequest(resource, method);
    
                RestRequestWithParam(request, method, paramObj);
    
                RestRequestWithHeader(request, headerObj);
    
                return this.Client.ExecuteAsync(request, callback);
    
            }
    
            public virtual RestRequestAsyncHandle ExecuteGetAsync(string resource, Action<IRestResponse, RestRequestAsyncHandle> callback, object paramObj = null, IDictionary<string, string> headerObj = null)
            {
                return this.ExecuteAsync(resource, Method.GET, callback, paramObj, headerObj);
            }
    
            public virtual RestRequestAsyncHandle ExecutePostAsync(string resource, Action<IRestResponse, RestRequestAsyncHandle> callback, object paramObj = null, IDictionary<string, string> headerObj = null)
            {
                return this.ExecuteAsync(resource, Method.POST, callback, paramObj, headerObj);
            }
    
            public virtual RestRequestAsyncHandle ExecutePutAsync(string resource, Action<IRestResponse, RestRequestAsyncHandle> callback, object paramObj = null, IDictionary<string, string> headerObj = null)
            {
                return this.ExecuteAsync(resource, Method.PUT, callback, paramObj, headerObj);
            }
    
            public virtual RestRequestAsyncHandle ExecuteDeleteAsync(string resource, Action<IRestResponse, RestRequestAsyncHandle> callback, object paramObj = null, IDictionary<string, string> headerObj = null)
            {
                return this.ExecuteAsync(resource, Method.DELETE, callback, paramObj, headerObj);
            }
    
            public virtual RestRequestAsyncHandle ExecuteAsync<T>(string resource, Method method, Action<IRestResponse<T>, RestRequestAsyncHandle> callback, object paramObj = null, IDictionary<string, string> headerObj = null)
            {
                //var asyncHandle = client.ExecuteAsync<Person>(request, response =>
                //{
                //    Console.WriteLine(response.Data.Name);
                //});
                RestRequest request = new RestRequest(resource, method);
    
                RestRequestWithParam(request, method, paramObj);
    
                RestRequestWithHeader(request, headerObj);
    
                return this.Client.ExecuteAsync<T>(request, callback);
            }
    
            public virtual RestRequestAsyncHandle ExecuteGetAsync<T>(string resource, Action<IRestResponse<T>, RestRequestAsyncHandle> callback, object paramObj = null, IDictionary<string, string> headerObj = null)
            {
                return this.ExecuteAsync<T>(resource, Method.GET, callback, paramObj, headerObj);
            }
    
            public virtual RestRequestAsyncHandle ExecutePostAsync<T>(string resource, Action<IRestResponse<T>, RestRequestAsyncHandle> callback, object paramObj = null, IDictionary<string, string> headerObj = null)
            {
                return this.ExecuteAsync<T>(resource, Method.POST, callback, paramObj, headerObj);
            }
    
            public virtual RestRequestAsyncHandle ExecutePutAsync<T>(string resource, Action<IRestResponse<T>, RestRequestAsyncHandle> callback, object paramObj = null, IDictionary<string, string> headerObj = null)
            {
                return this.ExecuteAsync<T>(resource, Method.PUT, callback, paramObj, headerObj);
            }
    
            public virtual RestRequestAsyncHandle ExecuteDeleteAsync<T>(string resource, Action<IRestResponse<T>, RestRequestAsyncHandle> callback, object paramObj = null, IDictionary<string, string> headerObj = null)
            {
                return this.ExecuteAsync<T>(resource, Method.DELETE, callback, paramObj, headerObj);
            }
            #endregion
    
            #region 
            protected void RestRequestWithParam(IRestRequest request, Method method, object paramObj)
            {
                if (paramObj != null)
                {
                    switch (method)
                    {
                        case Method.GET:
                            request.AddObject(paramObj);
                            break;
                        case Method.POST:
                            request.AddObject(paramObj);
                            break;
                        case Method.PUT:
                            request.AddJsonBody(paramObj);
                            break;
                        case Method.DELETE:
                            request.AddObject(paramObj);
                            break;
                        default:
                            request.AddObject(paramObj);
                            break;
                    }
                }
            }
    
            protected void RestRequestWithHeader(IRestRequest request, IDictionary<string, string> headerObj)
            {
                if (headerObj != null)
                {
                    foreach (KeyValuePair<string, string> item in headerObj)
                    {
                        request.AddHeader(item.Key, item.Value);
                    }
                }
            }
            #endregion
        }
    }
    

      3:使用  BaseClientHelper继承ClientHelper

     public class BaseClientHelper : ClientHelper
        {
            #region
            public BaseClientHelper() : this("")
            {
            }
    
            public BaseClientHelper(string baseUrl) : base(baseUrl)
            {
                this.Client = new RestClient(baseUrl);
            }
    
            public BaseClientHelper(Uri baseUrl) : base(baseUrl)
            {
                this.Client = new RestClient(baseUrl);
            }
    
            public BaseClientHelper(Uri baseUrl, int timeout) : base(baseUrl, timeout)
            {
                this.Client = new RestClient(baseUrl);
                this.Client.Timeout = timeout;
            }
            #endregion
    
            public BaseResponse<T> ExecuteSingle<T>(string url, Method method, object paramObj = null, IDictionary<string, string> headerObj = null) where T : new()
            {
                var request = new RestRequest(url, method);
    
                RestRequestWithParam(request, method, paramObj);
    
                RestRequestWithHeader(request, headerObj);
    
                IRestResponse<BaseResponse<T>> response = this.Client.Execute<BaseResponse<T>>(request);
    
                return response.Data as BaseResponse<T>;
            }
    
            public BaseResponse<T> ExecuteGetSingle<T>(string url, object paramObj = null, IDictionary<string, string> headerObj = null) where T : new()
            {
                return this.ExecuteSingle<T>(url, Method.GET, paramObj, headerObj);
            }
    
            public BaseResponse<T> ExecutePostSingle<T>(string url, object paramObj = null, IDictionary<string, string> headerObj = null) where T : new()
            {
                return this.ExecuteSingle<T>(url, Method.POST, paramObj, headerObj);
            }
    
            public BaseResponse<T> ExecutePutSingle<T>(string url, object paramObj = null, IDictionary<string, string> headerObj = null) where T : new()
            {
                return this.ExecuteSingle<T>(url, Method.PUT, paramObj, headerObj);
            }
    
            public BaseResponse<T> ExecuteDeleteSingle<T>(string url, object paramObj = null, IDictionary<string, string> headerObj = null) where T : new()
            {
                return this.ExecuteSingle<T>(url, Method.DELETE, paramObj, headerObj);
            }
    
            public BaseResponseList<T> ExecuteList<T>(string url, Method method, object paramObj = null, IDictionary<string, string> headerObj = null) where T : new()
            {
                var request = new RestRequest(url, method);
    
                RestRequestWithParam(request, method, paramObj);
    
                RestRequestWithHeader(request, headerObj);
    
                IRestResponse<BaseResponseList<T>> response = this.Client.Execute<BaseResponseList<T>>(request);
    
                return response.Data as BaseResponseList<T>;
            }
    
            public BaseResponseList<T> ExecuteGetList<T>(string url, object paramObj = null, IDictionary<string, string> headerObj = null) where T : new()
            {
                return this.ExecuteList<T>(url, Method.GET, paramObj, headerObj);
            }
    
            public BaseResponseList<T> ExecutePostList<T>(string url, object paramObj = null, IDictionary<string, string> headerObj = null) where T : new()
            {
                return this.ExecuteList<T>(url, Method.POST, paramObj, headerObj);
            }
    
            public BaseResponseList<T> ExecutePutList<T>(string url, object paramObj = null, IDictionary<string, string> headerObj = null) where T : new()
            {
                return this.ExecuteList<T>(url, Method.PUT, paramObj, headerObj);
            }
    
            public BaseResponseList<T> ExecuteDeleteList<T>(string url, object paramObj = null, IDictionary<string, string> headerObj = null) where T : new()
            {
                return this.ExecuteList<T>(url, Method.DELETE, paramObj, headerObj);
            }
    
        }
    

      4:调用

      BaseClientHelper clientHelper = new BaseClientHelper(ConfigurationManager.AppSettings["PI"]);

    IDictionary<string, string> headerObj = new Dictionary<string, string>();
    headerObj.Add("X-USER-LOGINNAME", "0");

     result = clientEabyHelper.ExecutePostSingle<bool>("/api/EbayBehand/Email/SendEvaluationLink", null, headerObj);

  • 相关阅读:
    互斥锁Mutex与信号量Semaphore的区别
    c/c++强制类型转换
    c++中的隐藏、重载、覆盖(重写)
    运算符重载详解
    类的大小
    C++ static、const和static const 以及它们的初始化
    一种隐蔽性较高的Java ConcurrentModificationException异常场景
    Java编码常见的Log日志打印问题
    Java编程常见缺陷汇总(一)
    Java字符串连接的多种实现方法及效率对比
  • 原文地址:https://www.cnblogs.com/TallkingIsEasying/p/15175126.html
Copyright © 2011-2022 走看看