Targets: - .NET Framework 4.5; - Windows 8; - Windows Phone 8.1; - Portable class library.
Hi all, I need to implement HTTP POST request on C# .NET Portable class library. I have faced with a problem, that parameters are not sent (request body is empty).
UPDATE I've tried this link and this link approaches with HttpClient, and request body is still empty END UPDATE
Here is comparison via fiddler of expected and actual request.
I have a code of this request that works fine from common ConsoleApplication, but I did not found a way how to implement such request at Portable class library. Here is code that works from common Console app:
using System;
using System.IO;
using System.Net;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
var p = new Program();
p.MakeRequests();
}
private void MakeRequests()
{
HttpWebResponse response;
string json = String.Empty;
if (Request_www_example_com(out response))
{
using (var sr = new StreamReader(response.GetResponseStream()))
{
json = sr.ReadToEnd();
}
response.Close();
}
}
private bool Request_www_example_com(out HttpWebResponse response)
{
response = null;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.example.com/gps/?city=kyiv&ID=3&lang=ru");
request.Accept = "*/*";
request.ContentType = "application/x-www-form-urlencoded";
request.Headers.Add("Accept-Languages", @"ru-RU,ru;q=0.7,en-US;q=0.6,en;q=0.4");
request.Headers.Add("Contents-Length", @"59");
request.Headers.Add("X-Requested-With", @"XMLHttpRequest");
request.Referer = "http://www.example.com/";
request.Headers.Set(HttpRequestHeader.AcceptLanguage, "en-US,en;q=0.7,ru;q=0.3");
request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
request.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko";
request.Headers.Set(HttpRequestHeader.Pragma, "no-cache");
request.Method = "POST";
request.ServicePoint.Expect100Continue = false;
string body = @"city=kyiv&ID=3&lang=ru";
byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body);
request.ContentLength = postBytes.Length;
Stream stream = request.GetRequestStream();
stream.Write(postBytes, 0, postBytes.Length);
stream.Close();
response = (HttpWebResponse)request.GetResponse();
}
catch (WebException e)
{
if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response;
else return false;
}
catch (Exception)
{
if (response != null) response.Close();
return false;
}
return true;
}
}
}
So please help me to translate this code to Portable. Thanks !