2015-11-12 51 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(); 

而且请使用查询字符串格式发布数据,例如:“用户id = {0} &令牌= {1} & ......”

+1

我正在开发.Net PCL项目,PCL中的WebRequest类没有ContentLength属性 – Subha

相关问题