好奇问一下,.net 程序员都用的什么 httphelper ?

2019-09-03 12:34:00 +08:00
 ddgweb

.net 知识还是 3 年前在学校学的,听朋友说.net core 很好,想把以前的一个后端接口升级一下,结果在 linux centos 系统,无缘无故的超时。

各种办法都试了,怀疑是不是自己的代码太老了,看了一下 httphelper 里面是基于 httpwebrequest,找了一下相关资料,说是对于 https 访问不太友好,尝试了 N 种代码添加的办法,发现还是无济于事。

转变思路,找一下其他的 httphelper,又找到了 httpclient,可是不好用啊,都是最基础的 url 访问,post、get,我需要用到 PostDataType、Allowautoredirect、postfile,都没有,难不成自己造轮子?

ps,我吐槽不是说不能造轮子,不是.net 给的东西不够好,而是,什么年代了,每一个.net 都停留在不断的造轮子时间上,还有时间发展吗?

.net core 你已经是一个成熟的框架了,得要学会自己写代码啊!!!

4047 次点击
所在节点    程序员
33 条回复
MonoLogueChi
2019-09-03 12:46:18 +08:00
httpclient 用的比较多,这东西越用越感觉不会的东西越多。以前自己造过很多小轮子,比如 gzip 解压之类的,后来发现这些都是已经封装好的。常用的东西大概率不会没有封装,再好好看一下官方文档。另外可以详细说明一下对 https 访问不友好是指哪方面吗,HttpClient 我没有遇到过什么大坑。
如果你一定要用什么类库,推荐一下 flurl
arrow8899
2019-09-03 13:23:35 +08:00
jtwor
2019-09-03 13:33:06 +08:00
是不是发现传个文件 还要拼接表单文本 惊了
hackfly
2019-09-03 13:52:42 +08:00
。。。。
ddgweb
2019-09-03 14:47:56 +08:00
@MonoLogueChi httpwebreqest 在 linux 访问 https 的 url,会大概率出现超时的情况,并且是无解
ddgweb
2019-09-03 14:48:50 +08:00
@jtwor 没这么夸张,我之前用的一个基于 httpwebrequest 封装的 httphelper 很好用,现在想改.net core 用 httpclient,没有什么比较封装好的框架,有点心累,难不成大家都在闭门造轮子吗
MonoLogueChi
2019-09-03 15:13:28 +08:00
@ddgweb 我真没发现这个问题。我用的 HttpClient,也是在 Linux 上跑到,Debian9 和 Debian10 都没遇到过 https 超时,.net core 2.2
ddgweb
2019-09-03 15:52:39 +08:00
@MonoLogueChi 所以,我不想用 httpwberequest,想改用 HTTPclient,但是你知道,httpwebrequest 转 httpclient,很多属性方法都不一样
xomix
2019-09-03 15:58:01 +08:00
请使用 HttpClient (高并发请使用 HttpClientFactory ),不要再继续使用仅为兼容而迁移的 HttpWebRequest。
至于轮子的问题,HttpClient 本身封装已经很足够了,没有必要再造轮子了,高并发情况下 HttpClientFactory 不知道多方便。
xomix
2019-09-03 16:00:14 +08:00
@ddgweb #8 是的,这就是让你换过来的原因之一,毕竟 HttpWebRequest 已经不再更新或变化了,仅仅是作为兼容旧版本的一种存在。
ddgweb
2019-09-03 16:22:39 +08:00
@xomix 头疼啊,从 httpwebrequest,就没看过内部代码,都是直接用的 httphelper,现在基于 httpclient 的 helper 做的差别太大啊
xomix
2019-09-03 16:27:28 +08:00
@ddgweb #11 这就不是我能帮你了,我也没法职责你之前设计不够优秀,总之,HttpWebRequest 是在 .net 4.5 之后就不提倡使用的技术了。
huobazi
2019-09-03 16:29:10 +08:00
看来我用 WebClient 是算刀耕火种了。
jiaozan
2019-09-03 16:37:49 +08:00
guolaopi
2019-09-03 16:40:10 +08:00
尝试从 HttpWebRequest 迁移到 HttpClient 试试再说,是有一部分属性方法不一样,但是大体上请求那一套东西差不了太多的。
ddgweb
2019-09-03 16:46:03 +08:00
@guolaopi 是,道理都目标,不过我意思是,为啥.net 大环境,没人把这事做了啊,大家以前应该都是用 httpwebrequest 的啊,难不成现在都是自己写 httpclient 然后每个人造轮子?
exonuclease
2019-09-03 16:51:46 +08:00
HttpClient
chongzi
2019-09-03 16:53:02 +08:00
nannanziyu
2019-09-03 17:44:57 +08:00
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 开 /关
nannanziyu
2019-09-03 17:47:45 +08:00
补充一句,楼主你都找到 HttpClient 了
只要随便 google 下结果就出来了
然而你都找不到答案,说明寻找并解决问题的能力很欠缺
而这点是程序员最重要的能力
如果你是我晚辈亲戚的话,我就劝你改行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/597476

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX