net httpget example c# windows-phone-8 webrequest

c# - httpget - httpwebrequest vb net example post



WebRequest no tiene método GetResponse-Windows Phone 8 (1)

La compilación .NET para Windows Phone contiene una implementación de la clase WebRequest que no tiene métodos síncronos para obtener flujo de solicitud y respuesta, ya que bloquearían la ejecución en el subproceso de la interfaz de usuario hasta que las operaciones se completen. Puede usar los métodos Begin / End existentes directamente con los delegados de devolución de llamada, o puede envolver esas llamadas en extensiones asíncronas que le darán el tipo de legibilidad y funcionalidad a las que está acostumbrado (más o menos). Mi método preferido es definir extensiones, por lo que demostraré este método, pero no tiene ninguna ventaja de rendimiento sobre el patrón de devolución de llamada. Tiene el lado WebRequest de ser fácilmente portátil en cualquier momento que necesite hacer uso de una WebRequest .

Async / Await Pattern

Definir extensiones personalizadas para la clase WebRequest:

public static class Extensions { public static System.Threading.Tasks.Task<System.IO.Stream> 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<System.IO.Stream>.Factory.FromAsync(wr.BeginGetRequestStream, wr.EndGetRequestStream, null); } public static System.Threading.Tasks.Task<System.Net.WebResponse> GetResponseAsync(this System.Net.WebRequest wr) { return Task<System.Net.WebResponse>.Factory.FromAsync(wr.BeginGetResponse, wr.EndGetResponse, null); } }

Use las nuevas extensiones (asegúrese de importar el espacio de nombres donde se definió su clase estática de extensiones):

public async System.Threading.Tasks.Task<bool> 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; }

En cuanto a su nota final, en este momento no veo suficiente información para entender qué es el URI de devolución de llamada, dónde está definido y cómo afecta lo que está haciendo.

Quiero enviar una solicitud a una API con algunos parámetros que me piden ... Terminé creando una cadena, es fea pero no sé cómo hacer que funcione de manera diferente. Luego encontré muchas variaciones en esta clase de WebRequest , pero desafortunadamente no puedo hacer que funcione.

El problema principal es probablemente porque realmente no entiendo cómo encaja todo esto, pero básicamente, los ejemplos que he seguido utilizan el método GetResponse WebRequest ... incluso en MSDN tiene esto, así que me pregunto por qué cuando trato de llamarlo en mi código, no estoy obteniendo esa opción? Lo mismo ocurre con GetRequestStream .

¿Cómo agregar parámetros en una 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; }

También tengo la pregunta de cuándo finalmente conseguiré que esto funcione, ¿qué debería poner en la devolución de llamada uri? si es un teléfono, ¿se está ejecutando fuera de localhost?