[英]GetResponse() in C#
我的便携式类库中有以下代码。 但它给出了错误
System.Net.HttpWebRequest
不包含GetResponse()
的定义。
public async Task<object> GetStateByUserId(string userID)
{
HttpWebRequest request;
Stream receiveStream;
StreamReader readStream;
request =(HttpWebRequest)CreateGetWebRequest("state/uid/"+userID);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) {
receiveStream = response.GetResponseStream ();
readStream = new StreamReader(receiveStream);
string str = readStream.ReadToEnd().ToString();
s = JsonConvert.DeserializeObject<state>(str);
return s;
}
}
谁知道为什么会这样?
如果您正在编写目标可移植类库,则必须使用异步方法,因为GetResponse不可用。
相反,你必须使用BeginGetReponse和EndGetResponse 。
在您的情况下,这可能如下所示:
public void StartRequest ()
{
HttpWebRequest request = (HttpWebRequest)CreateGetWebRequest("state/uid/"+userID);
request.BeginGetResponse(new AsyncCallback(FinishRequest), request);
}
private void FinishRequest (IAsyncResult result)
{
HttpWebResponse response = (result.AsyncState as HttpWebRequest).EndGetResponse(result) as HttpWebResponse;
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(receiveStream);
// ...
}
如果您使用的是.NET 4.5,则可以这样做:
HttpWebRequest request = (HttpWebRequest)CreateGetWebRequest("state/uid/"+userID);
Task<HttpWebResponse> requestTask = Task.Factory.FromAsync<HttpWebResponse>(request.BeginGetResponse, request.EndGetResponse, request);
using (var response = await requestTask)
{
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(receiveStream);
}
如果你看的文档GetResponse()
并将其与比较GetResponseAsync()
你会发现,版本信息,例如Windows应用商店的应用程序是缺少GetResponse()
和框架的其他版本丢失在GetResponseAsync()
。
根据您为PCL选择的框架版本,您可以直接使用GetResponseAsync()
(例如,如果您选择.Net 4.5和Windows Store,则没有其他内容)。
如果您需要一些不支持GetResponseAsync()
开箱即用的框架,那么我认为这里最好的解决方案是使用Microsoft.Bcl.Async NuGet包 ,这将允许您在其他包中使用GetResponseAsync()
框架的版本。
此外,切换到GetResponseAsync()
意味着您将需要使用await
来获取值,这也意味着使此方法和所有将其称为async
方法。 (虽然令人困惑,但似乎你已经在不使用await
情况下切换到async
,这没有多大意义。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.