好奇问一下,.net 程序员都用的什么 httphelper ? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
ddgweb
V2EX    程序员

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

  •  
  •   ddgweb 2019-09-03 12:34:00 +08:00 4707 次点击
    这是一个创建于 2234 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    第 1 条附言    2019-09-03 22:21:16 +08:00
    经过多个小时的代码迁移,经朋友推荐使用了 RestSharp,在 linux centos7 系统下,httpclient,post 访问 https 网站,报错 The SSL connection could not be established, see inner exception. The remote certificate is invalid according to the validation procedure.
    第 2 条附言    2019-09-03 23:52:48 +08:00
    经过不懈努力,把错误提升又升级了:An error occurred while sending the request. The server returned an invalid or unrecognized response.
    PS:一模一样的代码,在 windows 环境下没问题,在 linxu centos 有问题。都是 Nginx
    33 条回复    2019-09-04 12:49:29 +08:00
    MonoLogueChi
        1
    MonoLogueChi  
       2019-09-03 12:46:18 +08:00 via Android
    httpclient 用的比较多,这东西越用越感觉不会的东西越多。以前自己造过很多小轮子,比如 gzip 解压之类的,后来发现这些都是已经封装好的。常用的东西大概率不会没有封装,再好好看一下官方文档。另外可以详细说明一下对 https 访问不友好是指哪方面吗,HttpClient 我没有遇到过什么大坑。
    如果你一定要用什么类库,推荐一下 flurl
    arrow8899
        2
    arrow8899  
       2019-09-03 13:23:35 +08:00   3
    jtwor
        3
    jtwor  
       2019-09-03 13:33:06 +08:00
    是不是发现传个文件 还要拼接表单文本 惊了
    hackfly
        4
    hackfly  
       2019-09-03 13:52:42 +08:00
    。。。。
    ddgweb
        5
    ddgweb  
    OP
       2019-09-03 14:47:56 +08:00
    @MonoLogueChi httpwebreqest 在 linux 访问 https 的 rl,会大概率出现超时的情况,并且是无解
    ddgweb
        6
    ddgweb  
    OP
       2019-09-03 14:48:50 +08:00
    @jtwor 没这么夸张,我之前用的一个基于 httpwebrequest 封装的 httphelper 很好用,现在想改.net core 用 httpclient,没有什么比较封装好的框架,有点心累,难不成大家都在闭门造轮子吗
    MonoLogueChi
        7
    MonoLogueChi  
       2019-09-03 15:13:28 +08:00 via Android
    @ddgweb 我真没发现这个问题。我用的 HttpClient,也是在 Linux 上跑到,Debian9 和 Debian10 都没遇到过 https 超时,.net core 2.2
    ddgweb
        8
    ddgweb  
    OP
       2019-09-03 15:52:39 +08:00
    @MonoLogueChi 所以,我不想用 httpwberequest,想改用 HTTPclient,但是你知道,httpwebrequest 转 httpclient,很多属性方法都不一样
    xomix
        9
    xomix  
       2019-09-03 15:58:01 +08:00
    请使用 HttpClient (高并发请使用 HttpClientFactory ),不要再继续使用仅为兼容而迁移的 HttpWebRequest。
    至于轮子的问题,HttpClient 本身封装已经很足够了,没有必要再造轮子了,高并发情况下 HttpClientFactory 不知道多方便。
    xomix
        10
    xomix  
       2019-09-03 16:00:14 +08:00
    @ddgweb #8 是的,这就是让你换过来的原因之一,毕竟 HttpWebRequest 已经不再更新或变化了,仅仅是作为兼容旧版本的一种存在。
    ddgweb
        11
    ddgweb  
    OP
       2019-09-03 16:22:39 +08:00
    @xomix 头疼啊,从 httpwebrequest,就没看过内部代码,都是直接用的 httphelper,现在基于 httpclient 的 helper 做的差别太大啊
    xomix
        12
    xomix  
       2019-09-03 16:27:28 +08:00
    @ddgweb #11 这就不是我能帮你了,我也没法职责你之前设计不够优秀,总之,HttpWebRequest 是在 .net 4.5 之后就不提倡使用的技术了。
    huobazi
        13
    huobazi  
       2019-09-03 16:29:10 +08:00
    看来我用 WebClient 是算刀耕火种了。
    jiaozan
        14
    jiaozan  
       2019-09-03 16:37:49 +08:00
    guolaopi
        15
    guolaopi  
       2019-09-03 16:40:10 +08:00
    尝试从 HttpWebRequest 迁移到 HttpClient 试试再说,是有一部分属性方法不一样,但是大体上请求那一套东西差不了太多的。
    ddgweb
        16
    ddgweb  
    OP
       2019-09-03 16:46:03 +08:00
    @guolaopi 是,道理都目标,不过我意思是,为啥.net 大环境,没人把这事做了啊,大家以前应该都是用 httpwebrequest 的啊,难不成现在都是自己写 httpclient 然后每个人造轮子?
    exonuclease
        17
    exonuclease  
       2019-09-03 16:51:46 +08:00
    HttpClient
    chongzi
        18
    chongzi  
       2019-09-03 16:53:02 +08:00
    nannanziyu
        19
    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
        20
    nannanziyu  
       2019-09-03 17:47:45 +08:00
    补充一句,楼主你都找到 HttpClient 了
    只要随便 google 下结果就出来了
    然而你都找不到答案,说明寻找并解决问题的能力很欠缺
    而这点是程序员最重要的能力
    如果你是我晚辈亲戚的话,我就劝你改行了
    nannanziyu
        21
    nannanziyu  
       2019-09-03 17:51:50 +08:00
    HttpWebRequest 也是没有问题的,是你代码的 bug
    WeaPoon
        22
    WeaPoon  
       2019-09-03 17:56:54 +08:00
    去 NuGet 里随便搜一下都一大堆,例如 2 楼的。
    yulitian888
        23
    yulitian888  
       2019-09-03 17:57:38 +08:00
    唔,怎么说呢,谁能相信我今年还能看到.net 1.0/1.1 时代的 StringHelper、FileHelper,以及教学示例那种“学生三层”架构运行在商业项目中。
    谁能信今年一句 System.IO.Directory.Delete("路径", true);就能搞定的事情,还有人非要写上几十行递归。
    所以楼主这个,真不是什么事,太普遍了!
    guolaopi
        24
    guolaopi  
       2019-09-03 22:18:16 +08:00
    @ddgweb #16
    我觉得不算造轮子吧。而是 httpClient 本身就几乎达到轮子的级别了。我们顶多封装一下做泛型方法。
    ddgweb
        25
    ddgweb  
    OP
       2019-09-03 22:23:27 +08:00
    @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,依然如此。
    ddgweb
        26
    ddgweb  
    OP
       2019-09-03 22:25:00 +08:00
    @yulitian888 我个人觉得 StringHelper、FileHelper 就是一个快捷的好用的实用类,比类库、nuget 便捷高效(方便调试),至于你后半句的调侃,在学生时代大家都是这样过来的,出来写项目肯定会慢慢变好的
    magicdawn
        27
    magicdawn  
       2019-09-03 22:25:17 +08:00
    unirest
    guolaopi
        28
    guolaopi  
       2019-09-03 23:10:13 +08:00
    ddgweb
        29
    ddgweb  
    OP
       2019-09-03 23:34:56 +08:00
    @guolaopi 试了,还是一样。
    guolaopi
        30
    guolaopi  
       2019-09-03 23:42:38 +08:00
    @ddgweb #29
    那建议使用自己较为熟悉的语言(指你之前项目用的熟练的语言比如 java/python )写个简单的 demo 实现同样的功能,判断下是.NET CORE 的问题还是系统某些配置的问题
    ddgweb
        31
    ddgweb  
    OP
       2019-09-03 23:52:07 +08:00
    @guolaopi 同样的代码,在 windows 下没问题
    yulitian888
        33
    yulitian888  
       2019-09-04 12:49:29 +08:00
    @ddgweb 然而,这样的代码出自于今年,一位 40 多的老程序员之手,说好的提升在哪儿呢?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1237 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 17:20 PVG 01:20 LAX 10:20 JFK 13:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86