2011-01-10 65 views
2

我试图通过POST使用HttpWebRequest对象调用RESTful服务。我正在尝试传递一个变量与包含url编码字符串的请求正文。当它碰到服务器时我看到请求;但是,它显示了2个表单变量。第一个是Form [null],第二个是我的变量。HttpWebRequest POST向表单变量添加NULL值

我试图找到这个NULL键的来源;但是,我不能。任何关于如何补救这个问题的想法,因为当我尝试将它用于.Net的Nancy Web框架时,它会抛出问题。

代码:

var request = WebRequest.Create("http://localhost:8888/RouteName") as HttpWebRequest; 
request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded"; 

var jsonString = 
    "[\"00000000-0000-0000-000000000001\",\"00000000-0000-0000-000000000002\"]"; 

var data = new StringBuilder(); 
data.Append("Keys=" + HttpUtility.UrlEncode(jsonString)); 

byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString()); 
request.ContentLength = byteData.Length; 

using (var requestStream = request.GetRequestStream()) 
{ 
    requestStream.Write(byteData, 0, byteData.Length); 
} 

using (var response = request.GetResponse() as HttpWebResponse) 
{ 
    // ends up with a 500 response. 
} 

回答

2

我没有用的WebRequest很大程度上,主要是因为我发现WebClient的给我这么多更容易使用。 下面是使用Web客户端使用POST发送数据一个简单的例子:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var webclient = new WebClient(); 
     var valueToSend = new Message("some data", "some other data"); 
     var parameters = new NameValueCollection 
      { 
      {"Key", Jsonify(valueToSend)} 
      }; 
     webclient.UploadValues(
      "http://localhost:8888/Ny", 
      "POST", 
      parameters); 
    } 

    static string Jsonify(object data) 
    { 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      var ser = new DataContractJsonSerializer(data.GetType()); 
      ser.WriteObject(ms,data); 
      return Encoding.Default.GetString(ms.ToArray()); 
     } 
    } 

} 

这migth不会那么您要寻找的,但它带走了许多潜在的误差源。