应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

.net HttpClient通用的请求封装

1094人阅读 2024/9/8 16:16 总访问:5182921 评论:0 收藏:0 手机
分类: .NET

封装的代码如下

  1. /// <summary>
  2. /// 通用的请求类封装AJ
  3. /// </summary>
  4. public class NewRequestTools
  5. {
  6. /// <summary>
  7. /// 当配置中获取的地址为空的时候使用的地址
  8. /// </summary>
  9. private string defaultBaseAddress = "https://smartedu-apis.xx.com";
  10. /// <summary>
  11. /// 测试地址,方便测试的时候使用比如调试本地接口的时候,又难得去修改配置的情况
  12. /// </summary>
  13. private string testBaseAddress = "";
  14. /// <summary>
  15. /// 设置默认地址
  16. /// </summary>
  17. /// <param name="_baseApi"></param>
  18. public void SetDefaultBaseAddress(string _baseApi)
  19. {
  20. defaultBaseAddress = _baseApi;
  21. }
  22. /// <summary>
  23. /// 设置测试地址,这个开发的时候可以用,优先级最高
  24. /// </summary>
  25. /// <param name="_testBaseApi"></param>
  26. public void SetTestBaseAddress(string _testBaseApi)
  27. {
  28. testBaseAddress = _testBaseApi;
  29. }
  30. private async Task<string> GetToken()
  31. {
  32. TokenTools tokenTools = new TokenTools();
  33. string token = await tokenTools.GetToken();
  34. return token;
  35. }
  36. private string GetBaseAddress()
  37. {
  38. if (!string.IsNullOrWhiteSpace(testBaseAddress))
  39. {
  40. // 本地education的测试地址:
  41. // baseAddress = "http://127.0.0.1:8804";
  42. return testBaseAddress;
  43. }
  44. else
  45. {
  46. // 从配置文件中获取请求的基础地址
  47. string baseAddress = SmartEDU.Utils.Appsettings.Configuration["ApiVisit:Address"];
  48. if (string.IsNullOrWhiteSpace(baseAddress))
  49. {
  50. baseAddress = defaultBaseAddress;
  51. }
  52. return baseAddress;
  53. }
  54. }
  55. /// <summary>
  56. /// 封装通用的get请求
  57. /// </summary>
  58. /// <param name="url"></param>
  59. /// <returns></returns>
  60. public async Task<ApiReturnData> GetAsync(string url)
  61. {
  62. ApiReturnData apiReturnData = new ApiReturnData();
  63. string token = await GetToken();
  64. if (string.IsNullOrWhiteSpace(token))
  65. {
  66. apiReturnData.Msg = "token is empty";
  67. apiReturnData.Code = -1;
  68. return apiReturnData;
  69. }
  70. string baseAddress = GetBaseAddress();
  71. string questUrl = baseAddress + url;
  72. // 防止错误:One or more errors occurred. (The SSL connection could not be established, see inner exception.)”
  73. HttpClientHandler clientHandler = new HttpClientHandler();
  74. clientHandler.ServerCertificateCustomValidationCallback += (sender, cert, chain, sslPolicyErrors) => { return true; };
  75. clientHandler.SslProtocols = SslProtocols.None;
  76. HttpClient client = new HttpClient(clientHandler);
  77. client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
  78. client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");
  79. string result = client.GetAsync(questUrl).Result.Content.ReadAsStringAsync().Result;
  80. if (string.IsNullOrWhiteSpace(result))
  81. {
  82. apiReturnData.Msg = "请求失败!";
  83. apiReturnData.Code = -1;
  84. return apiReturnData;
  85. }
  86. apiReturnData.Code = 200;
  87. apiReturnData.Msg = "请求成功!";
  88. apiReturnData.Data = result;
  89. return apiReturnData;
  90. }
  91. /// <summary>
  92. /// 封装通用的Post请求
  93. /// </summary>
  94. /// <param name="url"></param>
  95. /// <param name="data"></param>
  96. /// <returns></returns>
  97. public async Task<ApiReturnData> PostAsync(string url, object data)
  98. {
  99. ApiReturnData apiReturnData = new ApiReturnData();
  100. string token = await GetToken();
  101. if (string.IsNullOrWhiteSpace(token))
  102. {
  103. apiReturnData.Msg = "token is empty";
  104. apiReturnData.Code = -1;
  105. return apiReturnData;
  106. }
  107. string baseAddress = GetBaseAddress();
  108. string questUrl = baseAddress + url;
  109. // 防止错误:One or more errors occurred. (The SSL connection could not be established, see inner exception.)”
  110. HttpClientHandler clientHandler = new HttpClientHandler();
  111. clientHandler.ServerCertificateCustomValidationCallback += (sender, cert, chain, sslPolicyErrors) => { return true; };
  112. clientHandler.SslProtocols = SslProtocols.None;
  113. HttpClient client = new HttpClient(clientHandler);
  114. client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
  115. client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");
  116. StringContent strcontent = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json");
  117. string result = client.PostAsync(questUrl, strcontent).Result.Content.ReadAsStringAsync().Result;
  118. if (string.IsNullOrWhiteSpace(result))
  119. {
  120. apiReturnData.Msg = "请求失败!";
  121. apiReturnData.Code = -1;
  122. return apiReturnData;
  123. }
  124. apiReturnData.Code = 200;
  125. apiReturnData.Msg = "请求成功!";
  126. apiReturnData.Data = result;
  127. return apiReturnData;
  128. }
  129. }

使用示例

基础的get请求

  1. NewRequestTools newRequestTools = new NewRequestTools();
  2. ApiReturnData apiResult = await newRequestTools.GetAsync("/labroom/api/MessageTask/GetTeacherTodayTeachingBad");

设置一点测试请求地址的

  1. #region 调用接口的基础东东
  2. // 本地的测试地址:
  3. string testBaseAddress = "http://127.0.0.1:8805";
  4. NewRequestTools newRequestTools = new NewRequestTools();
  5. newRequestTools.SetTestBaseAddress(testBaseAddress);
  6. #endregion
  7. ApiReturnData apiResult = await newRequestTools.GetAsync("/labroom/api/MessageTask/GetTeacherTodayTeachingBad");

post请求

  1. #region 调用接口的基础东东
  2. // 测试环境的地址:
  3. string testBaseAddress = "https://smartedu-testapi.xx.com";
  4. NewRequestTools requestTools = new NewRequestTools();
  5. requestTools.SetTestBaseAddress(testBaseAddress);
  6. #endregion
  7. List<ClassCourseStIdDto> evalEndCourseList = endCourseInfoDto.data;
  8. ApiReturnData evalResultApi = await requestTools.PostAsync("/evaluation/api/Report/GetStudentCourseComplete", evalEndCourseList);

其他备注

httpcent更多的用法参考

https://www.tnblog.net/aojiancc2/article/details/2707

HttpClient注入基础配置的用法参考

https://www.tnblog.net/notebook/article/details/8318

关于错误One or more errors occurred. (The SSL connection could not be established, see inner exception.)的解决

https://www.tnblog.net/xiuxin3/article/details/8446


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

.net HttpClient和webapi相关的东东先记录一点。传递Authorization headertoken

get请求传递Authorization header,tokenstringurl=&quot;你请求的url&quot;; stringtoken=&quot;yourtoken&quot;; Http...

.net HttpClient 请求报错:One or more errors occurred. (The SSL connection could not be established see inner exception.)

这是因为HttpClient请求的地址带https证书,如果遇到证书有问题,证书不合法什么的就请求不到了,我们可以这样设置一下解决...

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

cAPS.net 保存base64位格式的图片

publicvoidUpload() { //取出图片对应的base64位字符 stringimgBase=Request[&quot;imgBase&quot;]; //c#里边的base6...

Quartz.net实例动态改变周期调度。misfire、Cron

Quartz:Java编写的开源的任务调度作业框架 类似Timer之类定时执行的功能,但是更强大Quartz.NET:是把Quartz转成C# NuGet...

.net Windows服务发布、安装、卸载、监听脚本。服务调试

一、脚本 为方便不用每次都去写安装卸载的脚本1.安装脚本@echooff @echo开始安装【服务】 %SystemRoot%\Microsoft.NET\Fr...

c、VB.net中全角半角转换方法

///&lt;summary&gt; ///转全角的函数(SBCcase) ///&lt;/summary&gt; ///&lt;paramname=&quot;input&quot;&gt;任意字符串...

.net mvc分部页,.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

C.net 配合小程序实现经过第三方服务器中转文件

某些时候,微信小程序前段上传文件的时候需要经过第三方服务器再将文件上传到客户的服务器;操作如下:1:(小程序内向中端服...

.net实现QQ邮箱发送邮件功能

1、微软已经帮我们封装好了发送邮件的类MailMessage,MailMessage类构造一些邮件信息,然后通过SmtpClient进行邮件发送。Mai...

StackExchange.Redis操作redis(net core支持)

官方git开源地址https://github.com/StackExchange/StackExchange.Redis官方文档在docs里边都是官方的文档通过nuget命令下...

windows 自带的netsh进行端口映射

使用netsh 把本地任意ip的25566端口 映射到192.168.81.234的25565端口netshinterfaceportproxyaddv4tov4listenaddress=0.0....

确保.net程序始终以管理员身份运行

usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; ...

ASP.net Timer细节处理

Timer的用法:1:本人称之为计时器,是asp.net官方的一种。用法即是计时所用 2:关于计时有很多中方式,本人学识有限,暂...

.net core 使用session

tip:net core 2.2后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了使用nuget添加引用Microsoft.AspN...