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

posted @ 2021-08-23 11:17  近墨者黑,近我者甜  阅读(152)  评论(0编辑  收藏  举报