繁体   English   中英

C#中的GetResponse()

[英]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不可用。

相反,你必须使用BeginGetReponseEndGetResponse

在您的情况下,这可能如下所示:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM