Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中的GetResponse()#_C#_Rest_Httpwebrequest - Fatal编程技术网

C# C语言中的GetResponse()#

C# C语言中的GetResponse()#,c#,rest,httpwebrequest,C#,Rest,Httpwebrequest,我的可移植类库中有以下代码。但它给出了一个错误 System.Net.HttpWebRequest不包含 GetResponse() 公共异步任务GetStateByUserId(字符串userID) { HttpWebRequest请求; 流接收流; StreamReader readStream; request=(HttpWebRequest)CreateGetWebRequest(“state/uid/”+userID); 使用(HttpWebResponse=(HttpWebRespo

我的可移植类库中有以下代码。但它给出了一个错误

System.Net.HttpWebRequest
不包含
GetResponse()

公共异步任务GetStateByUserId(字符串userID)
{
HttpWebRequest请求;
流接收流;
StreamReader readStream;
request=(HttpWebRequest)CreateGetWebRequest(“state/uid/”+userID);
使用(HttpWebResponse=(HttpWebResponse)request.GetResponse()){
receiveStream=response.GetResponseStream();
readStream=新的StreamReader(receiveStream);
字符串str=readStream.ReadToEnd().ToString();
s=JsonConvert.DeserializeObject(str);
返回s;
}
}

有人知道为什么会这样吗?

如果您是针对可移植类库编写的,您将不得不使用异步方法,因为异步方法不可用

相反,你必须使用和

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

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);

    // ...
}
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);
}
如果您使用的是.NET 4.5,您可以这样做:

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);

    // ...
}
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);
}
HttpWebRequest-request=(HttpWebRequest)CreateGetWebRequest(“state/uid/”+userID);
Task requestTask=Task.Factory.FromAsync(request.BeginGetResponse,request.EndGetResponse,request);
使用(var响应=等待请求任务)
{
Stream receiveStream=response.GetResponseStream();
StreamReader readStream=新的StreamReader(接收流);
}
如果查看并与之比较,您会注意到在版本信息中,例如
GetResponse()
缺少Windows应用商店应用程序,而
GetResponseAsync()
中缺少框架的其他版本

根据您为PCL选择的框架版本,您可能可以直接使用
GetResponseAsync()
(例如,如果您选择了.Net 4.5和Windows应用商店,但没有其他选择)

如果您需要一些不支持现成的
GetResponseAsync()
的框架,那么我认为最好的解决方案是使用,这将允许您在框架的其他版本中使用
GetResponseAsync()


另外,切换到
GetResponseAsync()
意味着您需要使用
wait
来获取值,这也意味着使此方法和所有调用它的方法
异步。(虽然令人困惑,但您似乎已经切换到了
async
,而没有使用
wait
,这没有多大意义。)

在我的第一行问题中,我已经提到,您正在编写什么样的应用程序?它是一个Windows应用商店应用程序吗;你能展示一个完整的堆栈跟踪吗?你们为什么不阅读这个问题?错误是存在的,应用程序类型也是存在的:portable类库。不,我正在创建PCL,我将在所有移动平台上使用它。当我在android平台上使用此代码时,它运行良好,但在创建PCL时,它会给出错误。为什么这会被否决?我很困惑。我自己从来没有使用过PCL,但那个写着“由可移植类库支持”的图标对我来说似乎很清楚?@poke我没有投反对票,因为代码在技术上是正确的,但是:1。我认为在新代码中使用这种旧的异步模式是个坏主意,您应该使用
async
-
await
。2.文档实际上很混乱,因为如果指定目标框架的某些子集,您可以在PCL中使用
GetResponseAsync()
。@svick我在添加示例代码之前收到了否决票;我还使用了“经典”异步代码,因为我不知道OP使用的是哪个.NET版本(当时,问题没有经过编辑以显示方法声明的
async
部分)。我以前也尝试过。但我得到了相同的错误。@poke sir。