c# 客戶端呼叫 asp.net core webapi
public class WebApiClient
{
//webapi基地址
private Uri baseUri;
//http請求物件
HttpClient webApi = null;
//webapi元資料型別
private string mediaType;
public WebApiClient(string baseUri, string mediaType = "application/json") : this(new Uri(baseUri), mediaType)
{
}
public WebApiClient(Uri baseUri, string mediaType = "application/json")
{
this.baseUri = baseUri;
this.mediaType = mediaType;
webApi = new HttpClient();
webApi.BaseAddress = baseUri;
webApi.DefaultRequestHeaders.Accept.Clear();
webApi.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(mediaType));
}
//get請求
public async Task<T> GetApi<T>(string controlerName, string funcName, List<Tuple<string, object>> apiParams = null, params Tuple<string, object>[] heads) where T : FuncResult, new()
{
if (apiParams != null && apiParams.Count > 0)
{
var paramString = new StringBuilder();
foreach (var param in apiParams)
{
paramString.Append('&').Append(param.Item1).Append("=").Append(param.Item2);
}
funcName = funcName + "?" + paramString.ToString().Substring(1);
}
return await Call<T>(controlerName, funcName, method: HttpMethod.Get, heads: heads);
}
public async Task<T> PostApi<T>(string controlerName, string funcName, object apiParam, params Tuple<string, object>[] heads) where T : FuncResult, new()
{
return await Call<T>(controlerName, funcName, apiParam, HttpMethod.Post, heads: heads);
}
public async Task<T> PutApi<T>(string controlerName, string funcName, object apiParam, params Tuple<string, object>[] heads) where T : FuncResult, new()
{
return await Call<T>(controlerName, funcName, apiParam, HttpMethod.Put, heads: heads);
}
public async Task<T> DeleteApi<T>(string controlerName, string funcName, object apiParam, params Tuple<string, object>[] heads) where T : FuncResult, new()
{
return await Call<T>(controlerName, funcName, apiParam, HttpMethod.Delete, heads: heads);
}
async Task<T> Call<T>(string controlerName, string funcName, object apiParam = null, HttpMethod method = null, params Tuple<string, object>[] heads) where T : FuncResult, new()
{
T result = new T();
try
{
using (var message = new HttpRequestMessage(method, $"{controlerName}/{funcName}"))
{
//設定header資訊
if (heads != null && heads.Length > 0)
{
var headStringBuilder = new StringBuilder();
foreach (var head in heads)
{
message.Headers.Add(head.Item1, head.Item2.ToString());
}
}
if (apiParam != null)
{
message.Content = new StringContent(JsonConvert.SerializeObject(apiParam), Encoding.UTF8, mediaType);
}
var jsonResult = await webApi.Send(message).Content.ReadAsStringAsync();
if (!string.IsNullOrEmpty(jsonResult))
{
result = JsonConvert.DeserializeObject<T>(jsonResult);
}
else
{
result.SetError("webapi return json is null.");
}
}
}
catch (Exception ex)
{
result.SetError(ex);
}
return result;
}
}