[英]How do I carry a cookie from a System.Net.HttpWebResponse to the next System.Net.HttpWebRequest?
[英]How can I use System.Net.HttpWebRequest with async/await?
我一直试图将一个简单的HTTP客户端编写为具有最小依赖性的可移植类库,这使我认为我应该使用System.Net.HttpWebRequest
。
我看了文档 ,但是只显示了GetResponse
/ GetResponseStream
方法,我的实现中没有这些方法。 我只有BeginGetResponse
, BeginGetResponseStream
等。我尝试使用Task.Factory.FromAsync
将其转换为Task
,但是仅返回Task
,而不返回Task<HttpWebResponse>
。
这里是使用演员表的正确方法,例如以下吗?
var response = (Task<HttpWebResponse>)Task.Factory.FromAsync(request.BeginGetResponse, request.EndGetResponse);
还是我错过了什么?
编辑:我不想引入对其他NuGet包的依赖,因为我需要做的只是在一个小库中的一个位置中的单个HTTP请求。
如果使用通用Task<>.Factory
,则类型安全性更高:
var request = WebRequest.CreateHttp("https://www.google.com");
object state = null; // or whatever state you want.
var task = Task<WebResponse>.Factory.FromAsync(
request.BeginGetResponse,
request.EndGetResponse,
state);
但是,与不进行async
调用时一样,如果要使用HttpWebResponse
而不是WebResponse
,则需要执行其他强制转换。 并确保关闭/处理您的回复:
using (var response = (HttpWebResponse) (await task))
{
// use response
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.