2015-11-12 1 views
1

Я пытаюсь опубликовать данные от PCL проект удаленному серверу. Ниже мой код:Исключение при попытке отправить данные из проекта PCL

public async Task<bool> SendToken(string deviceToken, string userId) 
     { 
      HttpWebRequest request; 
      string url = "http://192.168.1.171:91/api/updatePushDeviceToken"; 
      request = (HttpWebRequest)WebRequest.Create(url); 
      request.ContentType = "application/x-www-form-urlencoded"; 
      request.Accept = "application/json"; 
      request.Method = "POST"; 
      string postData = string.Format("userId={0};token={1}&deviceType={2}", userId, deviceToken, deviceType); 
      var data = Encoding.UTF8.GetBytes(postData); 

      try 
      { 
       request.BeginGetResponse(new AsyncCallback(FinishRequest), request);  
      } 
      catch (Exception e) 
      { 
       string m = e.Message; 
      } 

      return false; 
     } 

     private void FinishRequest(IAsyncResult result) 
     { 
      HttpWebResponse response = (result.AsyncState as HttpWebRequest).EndGetResponse(result) as HttpWebResponse; 

      Stream receiveStream = response.GetResponseStream(); 
      StreamReader readStream = new StreamReader(receiveStream); 

      var responseString = readStream.ReadToEnd(); 

     } 

Во время работы над кодом ниже было брошено исключение:

System.Net.WebException: The remote server returned an error: (411) Length Required.

PCL не содержит ContentLength свойства, поэтому я добавил длину, как показано ниже, но теперь я получаю исключение, как :

try 
{ 
    request.Headers[HttpRequestHeader.ContentLength] = "0"; 
} 
catch (Exception e) 
{ 

} 

System.ArgumentException: This header must be modified with the appropiate property. at System.Net.WebHeaderCollection.CheckRestrictedHeader (System.String headerName)

+0

Вы делаете кодировать данные, но вы никогда не добавить его на запрос или я что-то пропустил? – Adwaenyth

ответ

0

Ваш запрос отсутствует в ContentLength имущества ваших почтовых параметров.

  var parameters = Encoding.ASCII.GetBytes(qstring); 
      var request = (HttpWebRequest)HttpWebRequest.Create(url); 
      request.AllowAutoRedirect = false; 
      request.ContentType="application/x-www-form-urlencoded"; 
      request.Method = "POST"; 
      request.ContentLength = parameters.Length; 

      //Send it 
      var reqStream = request.GetRequestStream(); 
      reqStream.Write(parameters, 0, parameters.Length); 
      reqStream.Close(); 

     //read it 
      var response = (HttpWebResponse)request.GetResponse(); 
      var sr = new StreamReader(response.GetResponseStream()); 
      string responseHtml = sr.ReadToEnd().Trim(); 

И, пожалуйста, используйте формат строки запроса для отправки данных, например: «идентификатор пользователя = {0} & маркер = {1} & ...»

+1

Я разрабатываю проект .Net PCL, класс WebRequest в PCL не имеет свойства ContentLength – Subha

Смежные вопросы