WebRequest没有GetResponse方法 – Windows Phone 8

我想向API发送一个post请求,其中包含一些他们要求的参数…我最后只是创建了一个字符串,它很难看,但我不知道让它以不同方式工作的方法。 然后我在这个WebRequest类上找到了很多变种,但不幸的是我无法让它工作。

主要问题可能是因为我并不是真的理解这一切是如何拟合的,但基本上,我一直在使用WebRequest方法GetResponse的例子……即使在MSDN上也有这个,所以我想知道为什么当我试着调用它时在我的代码中,我没有得到那个选择? GetRequestStream

在此处输入图像描述

如何将参数添加到WebRequest中?

  *****DBContext() { data = "grant_type=" + GRANTTYPE + "&username=" + username + "&password=" + password + "&client_id=" + CLIENTID + "&redirect_uri=" + REDIRECTURI + "&client_secret=" + CLIENTSECRET; } public bool Authenticate() { byte[] dataStream = Encoding.UTF8.GetBytes(data); WebRequest webRequest = WebRequest.Create(urlPath); webRequest.Method = "POST"; webRequest.ContentType = "application/json"; webRequest.ContentLength = dataStream.Length; Stream newStream = webRequest.GetRequestStream(); // Send the data. newStream.Write(dataStream, 0, dataStream.Length); newStream.Close(); WebResponse webResponse = webRequest.GetResponse(); return true; } 

我还有一个问题,那就是我什么时候才能让这些东西工作,我应该把它放在回调中。 如果它是手机,它是否运行localhost?

Windows Phone的.NET编译包含WebRequest类的实现,该实现没有用于获取请求流和响应的同步方法,因为这些将阻止UI线程上的执行,直到操作完成。 您可以直接使用现有的Begin / End方法和回调委托,也可以将这些调用包装在异步扩展中,这将为您提供(或多或少)您可以使用的可读性和function。 我首选的方法是定义扩展,因此我将演示此方法,但它没有回调模式的性能优势。 当您需要使用WebRequest它确实具有易于移植的优势。

异步/等待模式

为WebRequest类定义自定义扩展:

 public static class Extensions { public static System.Threading.Tasks.Task GetRequestStreamAsync(this System.Net.WebRequest wr) { if (wr.ContentLength < 0) { throw new InvalidOperationException("The ContentLength property of the WebRequest must first be set to the length of the content to be written to the stream."); } return Task.Factory.FromAsync(wr.BeginGetRequestStream, wr.EndGetRequestStream, null); } public static System.Threading.Tasks.Task GetResponseAsync(this System.Net.WebRequest wr) { return Task.Factory.FromAsync(wr.BeginGetResponse, wr.EndGetResponse, null); } } 

使用新扩展(确保导入定义了静态Extensions类的命名空间):

 public async System.Threading.Tasks.Task AuthenticateAsync() { byte[] dataStream = System.Text.Encoding.UTF8.GetBytes("..."); System.Net.WebRequest webRequest = System.Net.WebRequest.Create("..."); webRequest.Method = "POST"; webRequest.ContentType = "application/json"; webRequest.ContentLength = dataStream.Length; Stream newStream = await webRequest.GetRequestStreamAsync(); // Send the data. newStream.Write(dataStream, 0, dataStream.Length); newStream.Close(); var webResponse = await webRequest.GetResponseAsync(); return true; } 

关于你的最后一点,目前我没有看到足够的信息来理解回调URI是什么,它在哪里定义,以及它如何影响你正在做的事情。