如何从.NET 4.5通过HTTP下载字符串?

10
我有一个非常简单的需求 - 我的C#代码需要通过HTTP连接到远程服务器并下载一个字符串。只是一个微不足道的GET请求,没有更多的要求。
为了确保我的应用程序保持响应,在操作上我还想强制执行一个超时时间(比如3秒)。
我的第一个想法是使用System.Net.WebClient,但它不支持任何超时。
然后我想尝试一下老式的System.Net.HttpWebRequest,但遗憾的是-自.NET 4.5以来,它已经被标记为过时
所以,我能用什么?我查看了System.Net.Http命名空间,但它只允许异步使用,强制使用Task并且通常只添加了一打不同的抽象层而没有真正添加任何新功能(因为它在底层仍然使用相同的System.Net.HttpWebRequest)。
我不想要异步的东西,我不想涉及其他线程,我不想涉及任务框架,我不想有大量的包装器。
在.NET 4.5中,正确的做法是什么?

7
不是 HttpWebRequest 被弃用了,而是它的构造函数。不要使用 HttpWebRequest 构造函数。使用 WebRequest.Create 方法来初始化新的 HttpWebRequest 对象。 - GSerg
2
你仍然可以使用WebClient异步方法来设置超时时间:https://dev59.com/Y3RB5IYBdhLWcg3wgXdV#601899 - Sedat Kapanoglu
3
@GSerg - 完美!请将此内容制作成答案,以便我可以接受它! - Vilx-
2
如果你想让你的应用程序具有响应性,你应该使用“异步操作”。 - svick
当自2000年以来一直担任C#语言首席架构师的Anders Hejlsberg告诉你要尝试使用asyncawait时,你至少应该考虑一下;-)。C#和Visual Basic的未来。来吧,为了Anders去尝试一下吧... - Wim Ombelets
显示剩余5条评论
2个回答

14

HttpWebRequest 类并没有被弃用,只有它的构造函数被弃用。

引用文档

不要使用 HttpWebRequest 构造函数。请使用 WebRequest.Create 方法来初始化新的 HttpWebRequest 对象。如果统一资源标识符(URI)的方案是 http://https://,则 Create 将返回一个 HttpWebRequest 对象。


2

仅构造函数已被弃用,而不是 HttpWebRequest 类本身。请使用 WebRequest.Create 创建 HttpWebRequest 的实例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接