
.net 知识还是 3 年前在学校学的,听朋友说.net core 很好,想把以前的一个后端接口升级一下,结果在 linux centos 系统,无缘无故的超时。
各种办法都试了,怀疑是不是自己的代码太老了,看了一下 httphelper 里面是基于 httpwebrequest,找了一下相关资料,说是对于 https 访问不太友好,尝试了 N 种代码添加的办法,发现还是无济于事。
转变思路,找一下其他的 httphelper,又找到了 httpclient,可是不好用啊,都是最基础的 url 访问,post、get,我需要用到 PostDataType、Allowautoredirect、postfile,都没有,难不成自己造轮子?
ps,我吐槽不是说不能造轮子,不是.net 给的东西不够好,而是,什么年代了,每一个.net 都停留在不断的造轮子时间上,还有时间发展吗?
.net core 你已经是一个成熟的框架了,得要学会自己写代码啊!!!
1 MonoLogueChi 2019 年 9 月 3 日 via Android httpclient 用的比较多,这东西越用越感觉不会的东西越多。以前自己造过很多小轮子,比如 gzip 解压之类的,后来发现这些都是已经封装好的。常用的东西大概率不会没有封装,再好好看一下官方文档。另外可以详细说明一下对 https 访问不友好是指哪方面吗,HttpClient 我没有遇到过什么大坑。 如果你一定要用什么类库,推荐一下 flurl |
2 arrow8899 2019 年 9 月 3 日 |
3 jtwor 2019 年 9 月 3 日 是不是发现传个文件 还要拼接表单文本 惊了 |
4 hackfly 2019 年 9 月 3 日 。。。。 |
5 ddgweb OP @MonoLogueChi httpwebreqest 在 linux 访问 https 的 url,会大概率出现超时的情况,并且是无解 |
6 ddgweb OP |
7 MonoLogueChi 2019 年 9 月 3 日 via Android @ddgweb 我真没发现这个问题。我用的 HttpClient,也是在 Linux 上跑到,Debian9 和 Debian10 都没遇到过 https 超时,.net core 2.2 |
8 ddgweb OP @MonoLogueChi 所以,我不想用 httpwberequest,想改用 HTTPclient,但是你知道,httpwebrequest 转 httpclient,很多属性方法都不一样 |
9 xomix 2019 年 9 月 3 日 请使用 HttpClient (高并发请使用 HttpClientFactory ),不要再继续使用仅为兼容而迁移的 HttpWebRequest。 至于轮子的问题,HttpClient 本身封装已经很足够了,没有必要再造轮子了,高并发情况下 HttpClientFactory 不知道多方便。 |
11 ddgweb OP @xomix 头疼啊,从 httpwebrequest,就没看过内部代码,都是直接用的 httphelper,现在基于 httpclient 的 helper 做的差别太大啊 |
12 xomix 2019 年 9 月 3 日 @ddgweb #11 这就不是我能帮你了,我也没法职责你之前设计不够优秀,总之,HttpWebRequest 是在 .net 4.5 之后就不提倡使用的技术了。 |
13 huobazi 2019 年 9 月 3 日 看来我用 WebClient 是算刀耕火种了。 |
14 jiaozan 2019 年 9 月 3 日 |
15 guolaopi 2019 年 9 月 3 日 尝试从 HttpWebRequest 迁移到 HttpClient 试试再说,是有一部分属性方法不一样,但是大体上请求那一套东西差不了太多的。 |
16 ddgweb OP |
17 exonuclease 2019 年 9 月 3 日 HttpClient |
18 chongzi 2019 年 9 月 3 日 |
19 nannanziyu 2019 年 9 月 3 日 MultipartFormDataContent cOntent= new MultipartFormDataContent(); content.Add(new StreamContent(new System.IO.FileStream("d:/sample.png",FileMode.Open))); await new HttpClient().PostAsync("https://www.example.com",content); Multipart/form-data 上传文件三行 var client = new HttpClient(new HttpClientHandler() {AllowAutoRedirect = false}); Allowautoredirect 开 /关 |
20 nannanziyu 2019 年 9 月 3 日 补充一句,楼主你都找到 HttpClient 了 只要随便 google 下结果就出来了 然而你都找不到答案,说明寻找并解决问题的能力很欠缺 而这点是程序员最重要的能力 如果你是我晚辈亲戚的话,我就劝你改行了 |
21 nannanziyu 2019 年 9 月 3 日 HttpWebRequest 也是没有问题的,是你代码的 bug |
22 WeaPoon 2019 年 9 月 3 日 去 NuGet 里随便搜一下都一大堆,例如 2 楼的。 |
23 yulitian888 2019 年 9 月 3 日 唔,怎么说呢,谁能相信我今年还能看到.net 1.0/1.1 时代的 StringHelper、FileHelper,以及教学示例那种“学生三层”架构运行在商业项目中。 谁能信今年一句 System.IO.Directory.Delete("路径", true);就能搞定的事情,还有人非要写上几十行递归。 所以楼主这个,真不是什么事,太普遍了! |
25 ddgweb OP @nannanziyu 感谢你敲了一段代码,我看得懂,也能写的出,之所以从 httpwebrequest 转 httpclient,是因为我目前遇到了一个难题,在 linux centos7 系统下,httpwebrequest 和 httpclient,post 访问 https 网站,都会报错 The SSL connection could not be established, see inner exception. The remote certificate is invalid according to the validation procedure.,所以想找一些成熟的框架,正如 2 楼推荐的 RestSharp,依然如此。 |
26 ddgweb OP @yulitian888 我个人觉得 StringHelper、FileHelper 就是一个快捷的好用的实用类,比类库、nuget 便捷高效(方便调试),至于你后半句的调侃,在学生时代大家都是这样过来的,出来写项目肯定会慢慢变好的 |
27 magicdawn 2019 年 9 月 3 日 unirest |
28 guolaopi 2019 年 9 月 3 日 |
30 guolaopi 2019 年 9 月 3 日 |
32 agdhole 2019 年 9 月 4 日 |
33 yulitian888 2019 年 9 月 4 日 @ddgweb 然而,这样的代码出自于今年,一位 40 多的老程序员之手,说好的提升在哪儿呢? |