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);
浙公网安备 33010602011771号