V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ddgweb
V2EX  ›  程序员

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

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

    .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 的 url,会大概率出现超时的情况,并且是无解
    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   ·   实用小工具   ·   2072 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 16:15 · PVG 00:15 · LAX 08:15 · JFK 11:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.