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;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!